我有一张Excel表格,我已经从我的代码中命名了我必须填写的单元格。 命名字段的原因是客户可以重新排列单元格。
为了使它更清晰:我使用下面显示的字段命名单元格。
我现在的问题是我不知道如何使用office interop从C#中解决这些字段。
Range r = Sheet.get_Range("M_Leitung", Type.Missing);
不起作用。由于我没有定义任何范围,只需要插入值的单个单元格,我需要一个返回指定单元格的函数。
答案 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();
上面的代码打开一个文件并从工作簿中获取值并更新范围。我认为这将解决问题。