如何使用Excel Interop获取CustomDocumentProperties?
下面的代码用于获取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"];
前两行是对Excel Application
引用。 一个从VSTO插件内部获取参考,另一个是一个常规的new Application()
。
从VSTO内部使用Application
,代码运行罚款没有任何问题。 但是当使用new Application()
, workbook.CustomDocumentProperties
行会抛出InvalidCastException
:
无法将“System .__ ComObject”types的COM对象转换为接口types“Microsoft.Office.Core.DocumentProperties”。 此操作失败,因为IID为“{2DF8D04D-5BFA-101B-BDE5-00AA0044DE52}”的接口的COM组件上的QueryInterface调用由于以下错误而失败:没有此类接口支持(exception来自HRESULT:0x80004002(E_NOINTERFACE)) 。
我正在尝试使它在没有VSTO的C#winforms项目上工作。 很多示例和教程使用new Application()
for Excel interop,但我注意到, Microsoft.Office.Interop.Excel.Application
是一个接口,所以在界面上使用new
对我来说实际上是陌生的。 我怎样才能创build一个合适的应用程序,可以获得CustomDocumentProperties
?
我正在使用的参考组件:
- Microsoft.Office.Interop.Excel v2.0.50727版本14.0.0.0
- Microsoft.CSharp v4.0.30319版本4.0.0.0
我注意到,Microsoft.Office.Interop.Excel.Application是一个接口,所以在界面上使用new对我来说实际上是陌生的。
这确实是奇怪的,但通过devise。 Excel.Application
接口用CoClass
属性装饰,告诉实际的类在实例化接口时实例化。 更多关于这里 。
但是当使用
new Application()
,workbook.CustomDocumentProperties
行会抛出InvalidCastException
:
又奇怪了。 我自己使用文档属性遇到了一些问题。 看起来返回的实际类与规范不同,所以我转而使用dynamic
来防止types转换问题。
所以,而不是这个:
Microsoft.Office.Core.DocumentProperties properties = workbook.CustomDocumentProperties;
使用:
dynamic properties = workbook.CustomDocumentProperties;
我怎样才能创build一个合适的应用程序,可以获得CustomDocumentProperties?
如果您开发加载项,则不需要创build新的Excel应用程序实例。 您应该使用VSTO运行时提供的Application属性:
var xlApp = Globals.ThisAddIn.Application; // This works in VSTO Excel Add-in
但是,如果您开发一个使Excel自动运行的独立应用程序,那么您需要使用new运算符创build一个新的Application实例:
var xlApp = new global::Microsoft.Office.Interop.Excel.Application();
使用后期绑定技术(Type.InvokeMember)获取或设置文档属性作为如何使用自动化获取和设置Office文档属性与Visual C#.NET文章build议。
- EPPlus – 通过索引而不是字母表示法处理多个列
- 如何将DateTime,TimeSpan,string和双精度值从WPF MVVM应用程序导出到Excel?
- C#Azure文件存储CloudFile.OpenWrite与OpenXml.SpreadsheetDocument问题…需要FileMode和FileAccess选项?
- 将Excel工作表复制到包含格式的新工作表 – C#
- 是否有可能在C#中编写将在Excel中运行的ActiveX控件?
- 错误:索引超出限制
- SpreadsheetLight从单元格公式中获取数值
- 在excel的excel表格的开头添加一个新的列
- 如何用VSTO和C#创buildExcelfunction区“选项卡组”