簡體   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