2010-06-05 42 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

相關問題