0

我目前正在开发一个 C# 应用程序,它可以打开、读取和更新 Excel 启用宏的工作簿文件 (xlsm)。我能够读取和更新单元格,但无法读取/更新 ActiveX 控件,特别是组合框。

使用 Excel = Microsoft.Office.Interop.Excel;

使用 MSForm = Microsoft.Vbe.Interop.Forms;

我根据研究(http://forums.asp.net/t/1244356.aspx/1/10)尝试了不同的食谱来尝试阅读所选项目:

Excel.Shape aShape = xlWorkSheet.Shapes.Item(name);

对象o = aShape.OLEFormat.Object;

MSForm.ComboBox newBox = (MSForm.ComboBox)(((Excel.OLEObject)o).Object);

或者

Excel.OLEObject cb1 = (Excel.OLEObject)xlWorkSheet.OLEObjects(名称);

MSForm.ComboBox combo1 = (MSForm.ComboBox)cb1.Object;

但是当我尝试运行代码时,出现以下错误:

System.InvalidCastException:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“Microsoft.Vbe.Interop.Forms.ComboBox”。此操作失败,因为 IID 为“{8BD21D33-EC42-11CE-9E0D-00AA006002F3}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:未注册接口(来自 HRESULT 的异常:0x80040155)。

以下是我的环境的详细信息:

  • 视窗 7 64 位
  • MS Visual Studio 2008 专业版
  • .NET 3.5 SP1
  • Microsoft Excel 14.0.6129.5000(32 位)

作为项目参考,我添加了 .NET 组件:

路径:C:\Program Files (x86)\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.Office.Interop.Excel.dll

运行时版本:v1.1.4322

版本:12.0.0.0

路径:C:\Program Files (x86)\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\Microsoft.Vbe.Interop.Forms.dll

运行时版本:v1.1.4322

版本:11.0.0.0

关于可能是什么原因的任何想法?如果您已经知道如何从组合框中更改所选项目,请分享 :)

谢谢!

4

0 回答 0