按名称访问Excel单元格而不是像A1那样的“坐标”

时间:2011-08-09 08:55:54

标签: c# excel-2007

我有一张Excel表格,我已经从我的代码中命名了我必须填写的单元格。 命名字段的原因是客户可以重新排列单元格。

为了使它更清晰:我使用下面显示的字段命名单元格。

Excel Field Name

我现在的问题是我不知道如何使用office interop从C#中解决这些字段。

Range r = Sheet.get_Range("M_Leitung", Type.Missing);

不起作用。由于我没有定义任何范围,只需要插入值的单个单元格,我需要一个返回指定单元格的函数。

3 个答案:

答案 0 :(得分:6)

我只是模拟你的场景,下面的代码就像一个魅力(我在sheet2中将A1标记为M_Leitung):

编辑:更新的代码 - 当您有多个工作表时,需要在工作簿范围内引用名称,这些名称将返回完全限定的地址(因此结果范围知道从哪个工作表中选择地址)

private static void Main(string[] args)
{
    string FileName = Path.Combine(Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), "Book2.xlsx");

    Application excelApp = new Application();
    Workbooks excelWorkbooks = excelApp.Workbooks;
    Workbook report = excelWorkbooks.Open(FileName, 0, false, 5, "", "", true, XlPlatform.xlWindows, "", true, false, 0, false, false, false);

    var y = report.Names.Item("M_Leitung").RefersToRange.Value;

    Console.WriteLine(y);
    excelWorkbooks.Close();
    excelApp.Quit();
}

请注意,重命名单元格时会自动创建命名范围。如果您创建了一系列说A1:B1并且您选择了它。 Excel将向您显示该角标签中的命名范围,而不是证明它可以双向工作的地址。

HTH

答案 1 :(得分:2)

Excel中的已定义名称具有范围,即工作簿或工作表(即全局或本地)。像你一样输入它们会将它们创建为工作簿范围。使用名称管理器检查范围。

使用姓名& RefersToRange属性,而不是Range来访问它们。语法略有不同:

工作簿范围:Workbook.Names("M_Leitung").RefersToRange.Value

工作表范围:Workbook.Sheet.Names("M_Leitung").RefersToRange.Value

原因是您可以在不同的工作表上创建相同的名称。

答案 2 :(得分:0)

Excel.Application app = new Excel.ApplicationClass();

Excel.Workbook book =  app.Workbooks.Open(Filename: System.IO.Path.Combine( Environment.CurrentDirectory, "Book1.xls"));

Excel.Name MyRange =    book.Names.Item(Index:"MyRange");

Console.WriteLine(MyRange.RefersToRange.Value);

MyRange.RefersToRange.Value  = "55";

book.Save();

app.Quit();

上面的代码打开一个文件并从工作簿中获取值并更新范围。我认为这将解决问题。