我有一个模板excel文件,我从SQL Server OLEDB连接器填充数据。该文件包含一些数据透视表,这些数据透视表引用数据库填充的数据集。
目前,我所做的是使用“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行才能运行 - 模板文件只有列标题。我在第2行的第1个单元格中添加了一个随机字符串,并且数据透视表接受了该字符串。
之后我不得不使用c#代码删除该行。
谢谢你们的帮助。
答案 0 :(得分:4)
通过执行以下操作,您将在oSheet上创建一个命名范围(Transactions),盯着单元格A1并在单元格C3处完成
Range namedRange= oSheet.Range[oSheet.Cells[1, 1], oSheet.Cells[3, 3]];
namedRange.Name = "Transactions";
如果工作簿中已存在该名称,则将替换该名称,否则将创建该名称。
答案 1 :(得分:2)
对于WilliF来说可能为时已晚,但我遇到了同样的问题,这很有效:
oRng = oSheet.get_Range("Transactions");
Range namedRange = oSheet.Range[oSheet.Cells[1, 1], oSheet.Cells[3, 3]];
namedRange.Name = "Transactions";
来自here
答案 2 :(得分:1)
首先,您需要确定工作表中占用的单元格范围。然后为其指定一个名称。您可以使用工作表的UsedRange
属性来获取此属性,还有一些其他方法。
答案 3 :(得分: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:newRange.Name = "Transactions"
对我不起作用。