1

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

  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?

4

3 回答 3

0

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

Microsoft.Office.Interop.Excel._Workbook wb = excelApp.Workbooks.Open(...);
于 2012-09-27T02:39:16.023 回答
0

好的,您发生了一些奇怪的事情,因为 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 引用,还要确保在引用属性中将“Embed Interop Types”选项设置为“True”。

于 2012-09-27T02:46:57.677 回答
0

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

于 2012-11-13T23:25:25.190 回答