无法获取OLEObject类的Object属性 - Excel Interop

时间:2015-02-06 13:48:37

标签: c# excel interop office-2013

我搜索了这个问题并且无法提出解决方案。如果文件保存为.xls但不保存.xlsm,则此代码有效。我正在使用Office 2013(32位)。

我编写了一个暴露COM的C#类库。 excel工作簿实例化一个对象并传入对当前工作簿的引用。然后,对象调用excel对象并在第一张表上更新Label1的标题。

我打开了所有信任中心设置(它适用于.xls文件),无论如何都不会保护.xlsm文件。

我尝试过几种不同的更新标题的方法,我确保使用OLEObjects - 但它仍会抛出Unable to get the Object property of the OLEObject class

//Method 1
OLEObject label = this._currentBook.ActiveSheet.OLEObjects(1);
label.Object.Caption = "New text";
//
//Method 2
int index = -1;
foreach (OLEObject obj in this._currentBook.ActiveSheet.OLEObjects)
{ 
  if (obj.Name.ToUpper() == "LABEL1") 
  {
    index = obj.Index;
  }
}
if (index >= 0) 
    this._currentBook.ActiveSheet.OLEObjects(1).Object.Caption = "Some text";
//
//Method 3
this._currentBook.ActiveSheet.OleObjects("Label1").Object.Caption = "Different text";

此代码必须在类库中进行,因为这是我需要遵守的业务规则。 excel vba只是实例化我的类对象,托管代码完成剩下的工作。

1 个答案:

答案 0 :(得分:0)

解决方案是删除%APPDATA%和%TEMP%中的所有.exd文件,因为......

  

出现此问题是因为出于安全原因,某些可编写脚本的控件在Office 2013中已过时。这是设计的,并且预计会出现这些错误。通过使用仅适用于这些控件的特定于版本的kill-bit来禁用这些可编写脚本的控件,这仅在文档中使用时才会发生。我们建议您不要尝试将可编写脚本的控件直接嵌入到文档中,因为这种行为可能会降低系统安全性

感谢yay_excel协助我。这是帮助我的页面:

http://www.excelforum.com/excel-programming-vba-macros/1060133-run-time-error-1004-on-certain-machines.html

反过来又指向此MSDN知识库文章: MSDN