Excel Interop – 如何更改命名范围

我有一个模板excel文件,我从SQL Server OLEDB连接器填充数据。 该文件包含一些数据透视表,这些数据透视表是指由数据库填充的数据集。

目前我所做的是使用“Data!$ A:$ K”范围来select表格中的所有行。 这带来了数据透视表中显示空白值的问题。

我想要做的是在数据集上创build一个命名表,并将数据透视表引用到该数据表中(再加上名称表带来的其他优点)。

行的数量自然不会设置,所以我想find一种方法来将命名的范围范围设置为实际值。

我正在使用Excel Interop和C#,我找不到方法来改变范围。 我只有:

oRng = oSheet.get_Range("Transactions"); 

其中select命名的范围。 但是,我怎样才能改变属于它的细胞呢?

或者,我可以追求更好的解决scheme吗?

编辑

dynamic范围是答案!

我解决了这个感谢@TimWilliams的回复:

“在模板中使用dynamic范围: http : //ozgrid.com/Excel/DynamicRanges.htm ”

我觉得dynamic范围更好地描述在这里: http : //www.contextures.com/xlpivot01.html

我遇到了一个小问题,我不能在数据透视表中使用范围,因为它要求至less需要2行来操作 – 模板文件只有列标题。 我添加了一个随机string到第二行的第一个单元格和数据透视表接受。

之后,我不得不使用C#代码删除该行。

谢谢你们的帮助。

通过执行以下操作,您将在oSheet上创build一个命名的范围(事务),盯着单元格A1并在单元格C3

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

如果名称已经存在于工作簿中,则将被replace,否则将被创build。

WilliF可能已经太晚了,但是我遇到了同样的问题,结果如下:

 oRng = oSheet.get_Range("Transactions"); Range namedRange = oSheet.Range[oSheet.Cells[1, 1], oSheet.Cells[3, 3]]; namedRange.Name = "Transactions"; 

从这里

首先,您需要确定表格中占用的单元格范围。 然后分配一个名字。 您可以使用工作表的UsedRange属性来获取该属性,还有其他一些方法。

以编程方式获取最后填充的Excel行使用C#

如何获得Excel表格中占用的单元格的范围

你可以通过以下方式获得一个命名范

 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: newRange.Name = "Transactions"不适合我。