我搜索了这个问题并且无法提出解决方案。如果文件保存为.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只是实例化我的类对象,托管代码完成剩下的工作。
答案 0 :(得分:0)
解决方案是删除%APPDATA%和%TEMP%中的所有.exd文件,因为......
出现此问题是因为出于安全原因,某些可编写脚本的控件在Office 2013中已过时。这是设计的,并且预计会出现这些错误。通过使用仅适用于这些控件的特定于版本的kill-bit来禁用这些可编写脚本的控件,这仅在文档中使用时才会发生。我们建议您不要尝试将可编写脚本的控件直接嵌入到文档中,因为这种行为可能会降低系统安全性
感谢yay_excel协助我。这是帮助我的页面:
反过来又指向此MSDN知识库文章: MSDN