2012-03-20 86 views
4

我有一個模板excel文件,我從SQL Server OLEDB連接器中填入數據。該文件包含一些數據透視表,這些數據透視表引用數據庫填充的數據集。Excel Interop - 如何更改命名範圍

目前我所做的是使用「Data!$ A:$ K」範圍來選擇工作表中的所有行。這會在數據透視表中顯示空白值時出現問題。

我想要做的是在數據集上創建一個命名錶並將數據透視表引用到該數據表中(另外我還獲得了名稱錶帶來的一些其他優點)。

行數自然不會設置,所以我想找到一種方法來將命名的範圍範圍設置爲實際值。

我使用的是Excel Interop和C#,我無法找到改變範圍的方法。我只得到:

oRng = oSheet.get_Range("Transactions"); 

它選擇指定範圍。但是,如何更改屬於它的哪些單元?

或者我應該追求更好的解決方案嗎?

編輯

動態範圍是答案!

我解決了這個感謝@TimWilliams回覆:

「在模板中使用的動態範圍:http://ozgrid.com/Excel/DynamicRanges.htm

我覺得動態範圍更好地說明如下:http://www.contextures.com/xlpivot01.html

我遇到了一個輕微的問題,我不能使用數據透視表中的範圍,因爲它要求它至少需要2行才能操作 - 模板文件只有列標題。我向第二行的第一個單元添加了一個隨機字符串,並且數據透視表接受了該字段我不得不使用C#代碼刪除那行。

謝謝你們的幫助。

+1

在您的模板中使用動態範圍:http://www.ozgrid.com/Excel/DynamicRanges.htm – 2012-03-20 18:54:40

+0

它的工作!謝謝! – 2012-03-20 21:31:20

回答

4

通過執行以下操作,您將創建一個名爲範圍的oSheet(交易)在單元格A1盯着,並在小區C3

Range namedRange= oSheet.Range[oSheet.Cells[1, 1], oSheet.Cells[3, 3]]; 
namedRange.Name = "Transactions"; 

finising如果該名稱在工作簿將取代已經存在,如果沒有,它會被創建。

+0

這不適合我。我遇到了一個錯誤:「具有該名稱的表已經存在,請選擇其他名稱。」 – 2012-03-20 20:59:18

1

首先,您需要確定工作表中單元格的佔用範圍。然後爲它分配一個名稱。您可以使用工作表的UsedRange屬性來獲取該屬性,還有其他一些方法。

Programmatically getting the last filled excel row using C#

How to get the range of occupied cells in excel sheet

+0

我的問題是,我不知道如何更改已存在的已命名範圍的單元格範圍。 – 2012-03-20 21:00:30

+0

@WilliF刪除並重新創建範圍。無法記住這樣做的API調用,但是Google知道所有這些。 – ConcernedOfTunbridgeWells 2012-03-20 21:06:11

2

它可能爲時已晚WilliF,但我遇到了同樣的問題來了,這工作:

oRng = oSheet.get_Range("Transactions"); 

Range namedRange = oSheet.Range[oSheet.Cells[1, 1], oSheet.Cells[3, 3]]; 
namedRange.Name = "Transactions"; 

here

0

你可以得到一個名爲範圍通過:

var oRng = oSheet.get_Range("Transactions"); 

然後您可以使用Range.get_Offset(*RowOffset*, *ColumnOffset*)Range.get_Resize(*RowSize*, *ColumnSize*)來移動或調整它的大小。你也可以使用Offset[]Resize[]

var newRange = oRng.Offset[-1,3].Resize[2,4]; 

然後你可以將它保存爲名爲範圍是這樣的:

oSheet.Names.Add("Transactions", newRange); 

PS:​​沒有爲我工作。