繁体   English   中英

如何从“ Series.Values”(Excel图表)访问值

[英]How can I access the values from `Series.Values` (Excel Chart)

我正在使用Microsoft.Office.Interop.Excel命名空间,并且正在创建图表。 在某个时刻,我想检索某个系列的值。 MSDN上,它说Series对象具有属性Values 这将返回Range对象或array of values ,我假设是object[] 在我的代码中,我有以下声明:

Series series = (Series)chart.SeriesCollection(i);
object[] values = (object[])series.Values;

我收到一条InvalidCastException消息: Unable to cast object of type 'System.Object[*]' to type 'System.Object[]'.

当我使用Visual Studio 2008进行调试时,可以检查series.Values的类型,并显示为object{object[1..7]} (据我所知)这意味着将其声明为object但其实际类型为object[1..7] 但是object[1..7]并不是我可以转换为的类型, object[*]也不是。

我怀疑(或猜测)它可能与数组从1而不是0开始的事实有关(可能是由于VB)。 我什至不知道您可以在C#中定义一个基于1的数组...

即使很难,但在C#中创建基于非零索引的数组似乎很奇怪,实际上是可能的:

var array = Array.CreateInstance(
    typeof(object), 
    new int[] { 7 }, 
    new int[] { 1 });

在您的情况下,我认为您应该能够转换为数组并枚举:

foreach (object item in (Array)series.Values)
{
}

有一篇有趣的文章解释了CLR中关于此类数组的传奇。

实际上,为什么还要在创建数组之前就定义它。 因为您是从.Values属性返回结果。

这应该工作...

Series series = (Series)chart.SeriesCollection[i]; 
object[,] values = (object[,])series.Values; 

Darin是正确的,它是基于1的,但它也不是普通的二维数组。 范围和其他Excel对象使用基于1的“锯齿状”(我认为这是正确的描述)数组,因为任何范围对象都不必连续对齐。

如Darin建议那样使用Array类,因为它可以接受任何形式的对象数组,因此可以使用。 如果您只需要枚举项目,使用他的示例可能更容易工作。

这是Windows应用程序与VSTO模型之间的问题。

foreach (object item in series.Values as Array)

如果是VSTO,请尝试此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM