【问题标题】:Excel Interop - How to change named rangeExcel 互操作 - 如何更改命名范围
【发布时间】:2012-03-20 17:29:44
【问题描述】:

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

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

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

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

我为此使用 Excel 互操作和 C#,但我找不到更改范围的方法。我只知道:

oRng = oSheet.get_Range("Transactions");

选择命名范围。但是如何更改属于它的单元格呢?

或者我应该寻求更好的解决方案吗?

编辑

动态范围就是答案!

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

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

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

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

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

谢谢大家的帮助。

【问题讨论】:

标签: c# excel excel-interop


【解决方案1】:

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

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

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

【讨论】:

  • 这对我不起作用。我收到错误消息:“已存在同名的表。请选择其他名称。”
【解决方案2】:

对 WilliF 来说可能为时已晚,但我遇到了同样的问题,这很有效:

oRng = oSheet.get_Range("Transactions");

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

来自here

【讨论】:

    【解决方案3】:

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

    Programmatically getting the last filled excel row using C#

    How to get the range of occupied cells in excel sheet

    【讨论】:

    • 我的问题是我不知道如何更改已经存在的命名范围的单元格范围。
    • @WilliF 删除并重新创建范围。不记得执行此操作的 API 调用,但谷歌知道一切。
    【解决方案4】:

    您可以通过以下方式获取命名范围:

    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" 对我不起作用。

    【讨论】:

      猜你喜欢
      • 2010-11-06
      • 2015-10-31
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2019-12-05
      相关资源
      最近更新 更多