C# 将 COMObject 转换为 Excel.Workbook



我正在尝试在 C# 应用程序中打开工作簿。当我调用 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 组件才能使用互操作?

不确定您从哪里获得 System.InvalidCastException,但我认为您不能以这种方式构建工作簿实例。只需简化为...

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

好的,你有一些奇怪的事情发生,因为Excel互操作中的"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"。

我在对

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

最新更新