如何使用C#将自定义XML添加到打开的Excel 2007工作簿?

The*_*ian 14 c# xml excel excel-2007 excel-interop

我正在尝试使用C#将自定义XML添加到打开的Excel 2007工作簿中.我使用Microsoft.Office.Interop.Excel作为接口.我发现有一个CustomXMLPart类,但我无法弄清楚如何使用它.最初我希望代码简单如下:

CustomXMLPart myXMLPart = new CustomXMLPart(xmlString);

myWorkBook.XMLCustomParts.Add(myXMLPart);

但这并不接近工作.

我尝试过在线查找示例,但是他们在讨论Packages,Addins,OpenXML,VSTO流等时非常复杂.我已经解压缩了一个合适的工作簿(xlsx)并发现它有docProps/custom.xml元素.

我只是想在保存之前将类似的custom.xml添加到新工作簿(2007).这可能吗?请注意我无法安装任何其他软件包或库.

编辑:我在调查此问题方面取得了一些进展.我相信我有正确的Office引用(COM下的Microsoft Office 12.0对象库)和Excel互操作引用(GAC下的Microsoft.Office.Interop.Excel).

声明

Microsoft.Office.Core.CustomXMLParts myCustomXMLParts;
Run Code Online (Sandbox Code Playgroud)

然而,编译

Microsoft.Office.Core.CustomXMLParts myCustomXMLParts =
    Microsoft.Office.Interop.Excel.Workbook.CustomXMLParts;
Run Code Online (Sandbox Code Playgroud)

导致错误消息:错误CS0029:无法将类型"Microsoft.Office.Core.CustomXMLParts"隐式转换为"Microsoft.Office.Core.CustomXMLParts".

当我将鼠标悬停在Excel CustomXMLParts属性上时,它声称返回一个CustomXMLParts对象,在某种意义上,它是一个Microsoft.Office.Core.CustomXMLParts对象,但与Office程序集中的对象不完全相同.所以这里显然有一些不相容但我无法解决它.我安装了Microsoft Office Professional Plus 2007(12.0.6612.1000)和Office 2007主互操作程序集(12.0.4518.1014).

编辑:我很确定这是Office DLL的问题.在添加 - 引用上我看到"Microsoft Office 12.0对象库",可以添加它没有任何错误.它似乎只是参考文献下的"办公室".但是,它似乎对编译器不可见,同时仍然声称Microsoft.Office.Core是在未引用的程序集中定义的,并指定程序集'office',Version = 12.0.0.0.

我的Office引用链接到Microsoft Shared/OFFICE12下的MSO.DLL,并在Properties下有Major Version 2 Minor Version 4.这有关系吗?或者是错误消息只是表明由于某种原因它没有处理这个引用?

编辑:添加COM对象"Microsoft Office 12.0对象库"似乎肯定是问题.从其他论坛帖子我发现其他人看到"Microsoft.Office.Core"的引用出现,但我只看到"Office".我已经尝试直接编辑.csproj文件,这确实给了"Microsoft.Office.Core",但它仍然无法正常工作.我能真正得出的唯一结论是我的Office 12 Professional Plus的MSO.DLL(版本(12.0.6612.1000)实际上并不包含Microsoft.Office.Core程序集,或者无论如何都不会正确地公开它们.

小智 0

在第二个代码段中,Microsoft.Office.Interop.Excel.Workbook.CustomXMLParts 是一种类型,您不能将其分配给变量 myCustomXMLParts。你必须有

Microsoft.Office.Interop.Excel.Workbook myWorkbook = <some appropriate constructor>;
...
Microsoft.Office.Interop.Excel.Workbook.CustomXMLParts myParts = myWorkbook.CustomXMLParts;
Run Code Online (Sandbox Code Playgroud)