2010-06-05 58 views
1

我正在编写一个Word插件,该插件应该使用Word对象模型及其CustomXMLPart为每个文档存储一些自己的XML数据。我现在面临的问题是缺少类似IStream的功能来读取/写入CustomXMLPart的XML。它只提供BSTR接口,我很困惑如何使用BSTR来处理UTF-8 XML。据我所知,一个UTF-8 XML文件应该不需要经历这种Unicode转换。我不确定这里会有什么期望。使用Word的CustomXMLPart或任何其他支持的方式存储UTF-8 XML

是否有另一种使用Word自动化接口在DOCX文件中存储任意自定义信息的方法?

+0

下面回答你的问题吗? – 2010-07-31 01:46:44

+0

尽管这是一个很好的答案,但它并没有解决我遇到的问题(尽管我给了你+1)。我只是试图以兼容的方式使用'CustomXMLPart'。我最终提出的解决方案涉及操纵纯ASCII的XML,以便UCS-2到MBCS的转换不会以任何方式伤害它。这工作很好。对于使用Base64编码的非ASCII XML内容,仍然保留了ASCII-ness。即使您的解决方案最终可能工作,但我希望它非常简单,无需外部SDK。 – wpfwannabe 2010-08-02 11:50:46

回答

1

“包”是一个OPC文档(Open Packaging Convention),它基本上是一个具有不同扩展名的结构化zip文件夹(例如.pptx,.docx,.xps等)。你可以在流中获取该文件,并以任何你喜欢的方式操纵它 - 但不是artibitrarily。如果你把东西放在错误的地方(不仅仅是XML元素,而且还包括zip文件中的文件夹中的文件),它将不会被识别为有效的docx。但如果你只是在说“artibitrary”意思是CustomXMLPart,那没关系。

This是一个很好的踢球者页面,了解Open XML SDK的更多信息,如果您愿意,可以比使用(.NET)System.IO.Packaging或第三方软件更容易地访问文件格式,派对拉链库。为了更深入,抓住电子书(免费)Open XML Explained

在.NET中,使用Open XML SDK(同样可以在不使用SDK的情况下完成此操作),这是您想要执行的操作:How to: Insert Custom XML to an Office Open XML Package by Using the Open XML API

+0

非常感谢!我会尽快看看。与此同时,只有一个问题。我设法使用'CustomXMLParts'工作,但这很痛苦。由于这个'BSTR'问题,我使用'Base64'编码保存了我的XML纯ASCII和编码的非ASCII内容。 您使用Open XML SDK的方法是否可以使用Word加载项?请记住,DOCX文件正在由Word保持打开状态。 Open XML SDK是否允许在这种情况下进行操作?谢谢! – wpfwannabe 2010-06-07 08:45:43

+0

啊,如果文档当前处于打开状态(除非您从Sharepoint打开),它将不起作用。我对“BSTR”知之甚少,但我想冒险猜测C++中的变量与Primary Interop期望的字节大小是不同的。 – 2010-06-08 01:40:30

+0

是的,您可以通过VSTO加载项使用OpenXML SDK操作打开的Word文档。它运作良好。有一个MSDN博客文章介绍了如何去做。 – JasonPlutext 2010-07-10 07:50:53

相关问题