C#如何从启用Excel宏的工作簿文件(xlsm)中读取/更新activex组合框
我目前正在开发一个C#应用程序,用于打开、读取和更新启用Excel宏的工作簿文件(xlsm)。我能够读取和更新单元格,但无法读取/更新ActiveX控件,特别是组合框 使用Excel=Microsoft.Office.Interop.Excel 使用MSForm=Microsoft.Vbe.Interop.Forms 我根据研究()尝试了不同的食谱,尝试阅读所选项目: Excel.Shape aShape=xlWorkSheet.Shapes.Item(名称) 对象o=aShape.OLEFormat.Object MSForm.ComboBox newBox=(MSForm.ComboBox)((Excel.OLEObject)o.Object) 或者 Excel.OLEObject cb1=(Excel.OLEObject)xlsheet.OLEObjects(名称) MSForm.ComboBox combo1=(MSForm.ComboBox)cb1.Object 但是,当我尝试运行代码时,会出现以下错误: System.InvalidCastException:无法将“System.\u ComObject”类型的COM对象强制转换为接口类型“Microsoft.Vbe.Interop.Forms.ComboBox”。此操作失败,因为对IID为“{8BD21D33-EC42-11CE-9E0D-00AA006002F3}”的接口的COM组件的QueryInterface调用失败,原因是出现以下错误:接口未注册(HRESULT中的异常:0x80040155) 以下是我的环境的详细信息:C#如何从启用Excel宏的工作簿文件(xlsm)中读取/更新activex组合框,c#,excel,com,interop,activex,C#,Excel,Com,Interop,Activex,我目前正在开发一个C#应用程序,用于打开、读取和更新启用Excel宏的工作簿文件(xlsm)。我能够读取和更新单元格,但无法读取/更新ActiveX控件,特别是组合框 使用Excel=Microsoft.Office.Interop.Excel 使用MSForm=Microsoft.Vbe.Interop.Forms 我根据研究()尝试了不同的食谱,尝试阅读所选项目: Excel.Shape aShape=xlWorkSheet.Shapes.Item(名称) 对象o=aShape.OLEFor
- Windows 7 64位
- MS Visual Studio 2008专业版
- .NET3.5SP1
- Microsoft Excel 14.0.6129.5000(32位)
谢谢大家! 找到了解决方案:Office文档表面上的ActiveX控件只能通过后期绑定进行访问,在C#中,您需要使用PInvoke来获取内部MSForms对象。下面是一个如何读取所选项目的示例:Excel.Shape shp=xlWorkSheet.Shapes.item(名称);Excel.OLEFormat of=shp.OLEFormat;对象ctl=xlsheet.GetType().InvokeMember(名称,BindingFlags.GetProperty,null,xlsheet,null);字符串selectedItem=ctl.GetType().InvokeMember(“Text”,BindingFlags.GetProperty,null,ctl,null).ToString();你能告诉我吗。如何读取启用micro的excel文件。请帮帮我