我可以使用VSTO而不是Open XML来操作altChunk功能吗?

时间:2013-08-16 16:54:36

标签: ms-word vsto openxml-sdk

我想将一个Word文档(称之为“hidden.docx”)嵌入到另一个Word文档中(称之为“host.docx”)。当最终用户在Word中打开host.docx时,文档hidden.docx根本不可见。文档hidden.docx只能在host.docx中携带,有点像非结构化的货物数据。

我所做的所有研究都指向使用Open XML SDK提供的名为altChunk的东西。我安装了Open XML SDK并获得了一个示例:http://msdn.microsoft.com/en-us/library/gg490656%28v=office.14%29.aspx

我的问题:为了将altChunk插入docx,我真的需要Open XML SDK吗?使用VSTO无法实现吗?如果是这样,怎么样?

[PS:我的最终目标是,对于一对文档,其中一个文档是原始文本,另一个是其翻译版本的另一种语言,以便能够在翻译文档中保留原始文档,以免失去它。对于任何文档对,总是存在两个文档因错放其中一个文档而分离的风险。]

2 个答案:

答案 0 :(得分:2)

是和否。

1。)这不是AltChunks所做的。 AltChunks是一种将一个文档嵌入到另一个文档中以便将它们合并在一起的方法。他们没有隐藏。如果您创建一个包含AltChunk的docx包,然后打开Word,Word将立即将该AltChunk合并到文档中。 (如果AltChunk是另一个也包含子AltChunks的Word文档,它们也会以递归方式合并到父级中。)基本上,它是将内容合并在一起而不必重新整合所有样式,rID等的简单方法。 。 - 如果您保存文档并检查它,AltChunk将会消失,您会注意到Word已将文档重新合并为一个文档。

2。)Range.InsertXML,如果为完整的Word文档提供了有效的Flat Package,则会引发相同的合并功能(直到具有相同的错误等)会从AltChunk获得。这两者表现相同,你甚至可以使用包含嵌入式AltChunks的OpenXML SDK创建一个文档包,并插入那些(我已经在Word 2007,2010和2013中完成了这一点) - 当然,正如我所提到的上面,AltChunks永远不会被保留,它们会立即合并到文档中。

如果要在文档中保存隐藏数据,我建议使用自定义XML(请查看Document.CustomXMLParts)。但请记住,至少在Word 2010中,撤消不会还原对CustomXML部件的更改。

答案 1 :(得分:1)

如果您只想将一些文件包含在Open XML包中,那么最简单的方法是使用System.IO.Packaging命名空间中的API(首先获取对主机部分主文档部分的引用): / p>

EmbeddedPackagePart hiddenDocumentPart = mainDocumentPart.AddEmbeddedPackagePart(@"application/vnd.openxmlformats-officedocument.wordprocessingml.document");
hiddenDocumentPart.FeedData(File.Open(hiddenDocumentFile, FileMode.Open));

为了确保这一点,隐藏文档绝不会成为主机文档内容的一部分。它只是其文件(包)的一部分。您可以稍后使用类似的方法提取它:获取宿主文档的主要部分,找到嵌入(隐藏)部分并从中获取/读取数据。