Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何从启用Excel宏的工作簿文件(xlsm)中读取/更新activex组合框_C#_Excel_Com_Interop_Activex - Fatal编程技术网

C#如何从启用Excel宏的工作簿文件(xlsm)中读取/更新activex组合框

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

我目前正在开发一个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)

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

  • Windows 7 64位
  • MS Visual Studio 2008专业版
  • .NET3.5SP1
  • 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

你知道原因是什么吗?如果您已经知道如何从组合框中更改所选项目,请共享:)


谢谢大家!

找到了解决方案: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文件。请帮帮我