2013-03-20 46 views
0

如何將excel互操作圖表的源數據設置爲多行?Interop - 將Excel圖表的範圍設置爲整行

我有一個.csv文件,它是由我的程序創建的,用於顯示一些生成的結果。爲了簡便起見,我們假設這些結果和圖表顯示是這樣的:(這正是我希望它是)

enter image description here

現在我遇到的問題是,有多少人是可變的。所以我真的需要訪問整個行數據。

現在,我這樣做:

var range = worksheet.get_range("A1","D3"); 

xlExcel.ActiveChart.SetSourceData(range); 

這個偉大的工程,如果你只有三個Persons,但我需要訪問數據的整行。

因此,要重申我的問題,如何將我的圖表的源數據設置爲幾個完整的行?


我試圖尋找here,可就是不能做與行而不是列的工作。

+0

試試這個鏈接它實際上談論'行'http://stackoverflow.com/questions/12363163/fastest-way-to-get-an-excel-range-of-rows – MethodMan 2013-03-20 18:45:13

+1

@Jordan:看看' CurrentRegion屬性有助於解釋如下。 – shahkalpesh 2013-03-20 18:52:07

回答

3
var range = worksheet.get_range("A1").CurrentRegion; 

xlExcel.ActiveChart.SetSourceData(range); 

編輯:我假設細胞,在數據區域不會是空白的。
要進行測試,
1)電池放置光標A1
2)按F5
3)點擊 「特殊」
4)選擇 「當前區域」 選項
5)單擊「OK 「

這將選擇周圍的A1填充的細胞,我相信你正在尋找。

在VBA代碼中的翻譯指向CurrentRegion屬性。我認爲,這應該起作用。

+0

是的!爲簡單起見+1。謝謝! – 2013-03-20 18:53:33

+0

@JordanCarroll:謝謝。我很高興能夠有所幫助。 – shahkalpesh 2013-03-20 18:55:11

+0

你每天都會學到新的東西。很酷。 – Nevyn 2013-03-20 19:59:49

0

檢查出選項Range.EntireRow我不是100%關於如何將它擴展到包含3個整行的單個範圍,但它不應該很難完成。

您可以做的另一件事是掃描以獲取您需要的實際最大列索引(假設名稱中保證沒有空白),然後在聲明範圍時使用該索引。

添加代碼

int c = 2;//column b 
while(true) 
{ 
    if (String.IsNullOrEmpty(worksheet.GetRange(1,c).Value2)) 
    { 
     c--; 
     break; 
    } 
    c++; 
} 
0

從A以一列d那你肯定沒有空單元格。

做一些循環來找到該列中的第一個空的,它將會是最後一個。

Range Cell = SHeet.Range["A1"]; //or another column you're sure there's no empty data 

int LineOffset = 0; 

while (Cell.Offset[LineOffset, 0].Value != "") //maybe you should cast the left side to string, not sure. 
{ 
LineOffset++; 
} 

int LastLine = LineOffset - 1; 

然後你就可以得到範圍[Sheet.Cells [1,1],Sheet.Cells [lastLine所,4]

0

開箱即用,但爲什麼不轉置數據?名稱,高度,重量的三列。將其從普通範圍轉換爲表格。

當任何公式(包括圖表的SERIES公式引用表的列)時,無論表獲得多長時間,它總是引用該列。添加另一個人(另一行),圖表顯示添加人員的數據。移除幾個人,最後調整圖表而不留空白。

這在我的教程Easy Dynamic Charts Using Lists or Tables中進行了說明。