[英]How can I set the values of a chart series in SpreadsheetGear programmatically?
[英]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.