在C#中通过名称引用更新Excel单元格的值

3

我在Excel中有一个名为"myCell"的单元格。现在我希望能够在C#中访问并更新这个单元格的值。我已经尝试过:

Globals.ThisAddIn.Application.Names.Item(@"myCell").Value = "myValue";

但是这会抛出一个COM异常,错误信息为“Exception from HRESULT: 0x800A03EC”

3个回答

2
您的问题是:

您遇到的问题是:

Globals.ThisAddIn.Application.Names.Item(@"myCell")

该函数不返回可设置值的范围,而是返回一个名称类型的对象。您可以使用RefersToRange属性获取表示要查找的单元格的范围,然后为此对象设置值。总体来说,这意味着:

Globals.ThisAddIn.Application.Names.Item(@"myCell").RefersToRange.Value = "myValue";

1

只需使用Range对象。命名单元格是一种命名的Range,因此这应该可以工作:

myWorkBook.myWorkSheet.Range["myCell"].Value = "myValue";

附言:我无法检查这个,也不确定您是否可以直接将值分配给Range对象,或者您需要指定单元格在Range内的偏移量(因为它可能包含多个单元格)。

您还可以尝试:(我不记得命名范围是否直接与单元格一起使用)

myWorkBook.myWorkSheet.Cells["myCell"].Value = "myValue";

两者都会显示“非可调用成员'Microsoft.Office.Interop.Excel._Application.Range'不能像方法一样使用”的消息。 - Eddie
1
@Eddie:哎呀,把那些 ( 改成 [。我修改了我的帖子。 - InBetween
仍然触发相同的消息,带有[]。 - William Walseth

0

使用:

var cell = myWorksheet.Evaluate("defined_name");
if (cell != null) { cell.Value = "hello"; }

或者:

myWorksheet.Cells.SetValue("defined_name", "hello");

在最后一种情况下,尝试为不存在的名称设置值会出现“Exception from HRESULT: 0x800A03EC”。
如果检查 null 不起作用,请参考 this answer 中列出的整数值错误列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接