1

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

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

我的问题:为了在altChunkdocx 中插入一个,我真的需要 Open XML SDK 吗?这不能使用 VSTO 完成吗?如果是这样,怎么做?

【PS:我的最终目标是,对于一对文档,一个文档是原文,另一个是翻译成另一种语言的版本,能够在翻译文档中保留原始文档,以免丢失. 对于任何文档对,始终存在两个文档因其中一个错位而分开的风险。]

4

2 回答 2

2

是和否。

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

2.) Range.InsertXML,如果为完整的 Word 文档提供了一个有效的平面包,它将在后台调用您从 AltChunk 获得的相同合并功能(包括相同的错误等)。两者的行为相同,您甚至可以使用包含嵌入式 AltChunks 的 OpenXML SDK 创建一个文档包,然后插入它们(我在 Word 2007、2010 和 2013 中做过)——当然,正如我上面提到的, AltChunk 永远不会持久化,它们会立即合并到文档中。

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

于 2014-03-25T22:12:30.267 回答
1

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

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

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

于 2014-03-26T14:08:25.653 回答