![](/img/trans.png)
[英]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.