C#将COMObject转换为Excel.Workbook

时间:2012-09-27 01:48:19

标签: c# office-interop .net

我正在尝试在C#应用程序中打开WorkBook。当我调用Open方法时,它返回System__COMObject而不是工作簿。这是我的代码:

  Microsoft.Office.Interop.Excel._Application excelApp = new Application();
  Microsoft.Office.Interop.Excel._Workbook wb = new WorkBook();      

  wb  = excelApp.Workbooks.Open(filepath, Type.Missing, Type.Missing, Type.Missing,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

错误是System.InvalidCastException。我有什么想法吗?

编辑:我现在不安装任何COM软件包或调整任何设置。我是否需要任何COM组件才能与Interop一起使用?

3 个答案:

答案 0 :(得分:0)

不确定您获取System.InvalidCastException的位置,但我认为您不能以这种方式构造Workbook实例。只需简化为......

Microsoft.Office.Interop.Excel._Workbook wb = excelApp.Workbooks.Open(...);

答案 1 :(得分:0)

好的,你有一些奇怪的事情,因为Excel interop中的“WorkBook”是一个接口,而不是一个类。 “= new WorkBook()”根本不应该工作。

var excelApp = new Application();
var wb = excelApp.Workbooks.Open( filepath, Type.Missing, Type.Missing, 
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing ) as Workbook;

应该告诉你你所追求的是什么。声明中的类型(使用_Application)也看起来有点糟糕。

此示例使用Excel的COM参考,同时确保参考属性中的“嵌入互操作类型”选项设置为“True”。

答案 2 :(得分:0)

我在深入研究这个问题之后。我发现Microsoft.Interop与Excel有一些已知问题。我最终决定采用另一种解决方案Flexcel。