C# Excel互操作-如何更改命名范围

C# Excel互操作-如何更改命名范围,c#,excel,excel-interop,C#,Excel,Excel Interop,我有一个excel模板文件,可以从SQL Server OLEDB连接器将数据填入其中。该文件包含一些透视表,这些透视表引用数据库正在填充的数据集 目前我所做的是使用数据选择工作表中的所有行$A:$K范围。这会导致数据透视表中显示空白值的问题 我想做的是在数据集上创建一个命名表,并将透视表引用到该数据集,此外,我还获得了命名表带来的一些其他优势 行数自然不会设置,因此我想找到一种方法,将命名范围范围范围仅设置为实际值 我使用的是Excel Interop和C,我找不到改变范围的方法。我只知道:

我有一个excel模板文件,可以从SQL Server OLEDB连接器将数据填入其中。该文件包含一些透视表,这些透视表引用数据库正在填充的数据集

目前我所做的是使用数据选择工作表中的所有行$A:$K范围。这会导致数据透视表中显示空白值的问题

我想做的是在数据集上创建一个命名表,并将透视表引用到该数据集,此外,我还获得了命名表带来的一些其他优势

行数自然不会设置,因此我想找到一种方法,将命名范围范围范围仅设置为实际值

我使用的是Excel Interop和C,我找不到改变范围的方法。我只知道:

oRng = oSheet.get_Range("Transactions");
它选择命名的范围。但是我如何改变属于它的细胞呢

或者我是否应该寻求更好的解决方案

编辑

动态范围就是答案

感谢@TimWilliams回复,我解决了这个问题:


在模板中使用动态范围:

我觉得这里更适合描述动态范围:

我遇到了一个小问题,即我无法使用pivot表中的范围,因为它要求至少需要2行来操作-模板文件只有列标题。我在第二行的第一个单元格中添加了一个随机字符串,透视表接受了这一点

之后,我不得不使用c代码删除该行


谢谢大家的帮助。

通过执行以下操作,您将在oSheet上创建一个命名范围事务,从单元格A1开始,到单元格C3结束

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

如果工作簿中已存在该名称,则将替换该名称,否则将创建该名称。

首先,您需要确定工作表中占用的单元格范围。然后为它指定一个名称。您可以使用工作表的属性来获取此信息,还有一些其他方法


对威利夫来说可能太晚了,但我遇到了同样的问题,这起到了作用:

oRng = oSheet.get_Range("Transactions");

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

中,您可以通过以下方式获得命名范围:

var oRng = oSheet.get_Range("Transactions");
然后您可以使用Range.get_Offset*RowOffset*、*columnpoffset*或Range.get_resize*RowSize*、*ColumnSize*移动或调整其大小。还可以使用偏移[]和调整[]的大小:

然后可以通过以下方式将其保存为命名范围:

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

PS:newRange.Name=交易对我不起作用。

在模板中使用动态范围:这对我不起作用。我得到一个错误:具有该名称的表已经存在。请选择其他名称。我的问题是,我不知道如何更改已存在的命名区域的单元格区域。@WilliF删除并重新创建该区域。我记不起API调用是如何做到这一点的,但谷歌知道一切。
oSheet.Names.Add("Transactions", newRange);