【发布时间】:2015-03-11 08:29:10
【问题描述】:
以下代码用于获取 Excel 工作簿的自定义文档属性。
var xlApp = Globals.ThisAddIn.Application; // This works in VSTO Excel Add-in
var xlApp = new global::Microsoft.Office.Interop.Excel.Application(); // This doesn't work anywhere
xlApp.Visible = true;
global::Microsoft.Office.Interop.Excel.Workbook workbook = xlApp.Workbooks.Open(file, false, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, false, Type.Missing, Type.Missing);
global::Microsoft.Office.Core.DocumentProperties properties = workbook.CustomDocumentProperties; // Exception occurs here
global::Microsoft.Office.Core.DocumentProperty property = properties["propertyname"];
前 2 行是对 Excel Application 的引用。一种是从 VSTO 插件内部获取引用,另一种是常规的new Application()。
使用 VSTO 内部的 Application 时,代码运行良好,没有任何问题。但是当使用new Application() 时,workbook.CustomDocumentProperties 行会抛出InvalidCastException:
无法将“System.__ComObject”类型的 COM 对象转换为接口 键入“Microsoft.Office.Core.DocumentProperties”。此操作失败 因为接口的 COM 组件上的 QueryInterface 调用 IID 为“{2DF8D04D-5BFA-101B-BDE5-00AA0044DE52}”失败,原因是 以下错误:不支持此类接口(来自 HRESULT 的异常: 0x80004002 (E_NOINTERFACE))。
我试图让它在没有 VSTO 的 C# winforms 项目上工作。很多示例和教程使用new Application() 进行Excel 互操作,但我注意到Microsoft.Office.Interop.Excel.Application 是一个接口,所以在接口上使用new 对我来说其实很奇怪。如何创建可以获取CustomDocumentProperties 的适当应用程序?
我正在使用的参考程序集:
- Microsoft.Office.Interop.Excel v2.0.50727 版本 14.0.0.0
- Microsoft.CSharp v4.0.30319 版本 4.0.0.0
【问题讨论】: