2

是否可以添加(通过 MS Word 对象模型?或通过编辑文件)一些自定义数据(可能是另一个文件?)

在 MS Word 中打开、更改和保存文档后,这些数据会保留吗?

(我需要在某些报告导出时将一些跟踪数据放入 docx 中,在导入时将再次使用自定义数据)

4

5 回答 5

9

是的。这相当简单,但据我所知,没有记录(完全或非常好)。假设您想将一个.ini文件添加到您的 Office 文档(.docx、.xslx、.pptx)中,以便与您的文档“随身携带”(即,您通过电子邮件将您的.docx发送给某人并想要yourfile .ini即使打开 DOCX 的人进行了一些更改,然后将其保存并发回给您,您也已添加以保留yourdoc .docx )。

  1. 将文档的扩展名重命名为 .zip。解压它。
  2. 在根文件夹中,找到 [Content_Types].xml文件并打开它。
  3. <Type/>在根元素下方,添加<Default Extension="ini" ContentType="custom/ini"/>(注意 - 对于另一个文件,只需确保扩展名与您要添加的文件匹配并且属性 Extention匹配。对于 ContentType属性,可以是任何东西)。
  4. 现在将您的文件名.ini文件添加到包中。您可以将其添加到任何位置 - 根目录、/word路径、新文件夹(如/word/MyIniFiles)
  5. 接下来,设置文件和文档之间的关系。如果您不这样做,该文件将不会随文档一起携带。导航到 \word_rels\document.xml.rels文件,并在属性是你的唯一名称(最好坚持使用 rID X或类似的东西)下添加类似的东西,<Relationships/> 反映一个 URI(几乎任何东西)和是您添加的文件的相对路径。我将abcpy.ini添加到与 document.xml位于同一根目录的/word文件夹中,因此我的相对路径只是文件名。如果我将它添加到 /word下名为myIniFiles的文件夹中,<Relationship Id="rd1" Type="http://schemas.microsoft.com/office/2007/relationships/ini" Target="abcpy.ini" />IdTypeTypeTargetTarget将是 myIniFiles/abcpy.ini
  6. 保存一切。从根目录重新压缩您的文件,并将文档重新命名为您的原始名称,并将扩展名重新命名为.docx。复制/粘贴原始文件。完毕。

如果您有 Open XML 包编辑器(VS2008 的VSTO Power Tools的一部分或最近发布的 VS 2010的独立工具),您可以使用 VS 为您完成其中的一些工作,但本质上是相同的。不同的术语虽然像TargetequalsName等。

请注意,这不是某种黑客行为。Microsoft 自己在 Office 2010 中对使用新的“艺术效果”修改的图像使用了同样的技术 - 原始图像文件被移植到HDPhoto类型,修改后的图像保存为 png 或 jpg(这些是显示在客户端)。hdphoto(带有.wdp扩展名)随文档一起传输,但从未实际用于 Word、PowerPoint 等中的显示。

于 2010-06-27T18:54:10.513 回答
3

是的,这是可能的。Word 具有允许您将任意 XML 文档嵌入到 Word 文档中的功能。此功能称为自定义 XML

编辑文档时会保留嵌入的文档,也可以从文档内访问,使用 VBA 以编程方式或使用 Word 2007 引入的内容控件。

请注意,Word 要求嵌入的内容是 XML,但这并不限制您使用纯 XML 数据,因为您可以使用 base64 编码将二进制内容嵌入 XML。

MSDN 有一个 C# 示例,向您展示如何将自定义 XML 部分添加到 .docx 文件:

如何:在不启动 Microsoft Office 的情况下将自定义 XML 部件添加到文档

于 2010-06-26T12:03:24.743 回答
2

为了完整起见,您还可以使用字段DocVariable。这实际上是一个书签,与文档属性的方式相同,但更开放,至少对于命名而言。这些最适合相对较小的信息。如果要添加完整的文件,其他方法可能会更好。

看:

什么是 Word 中的 DOCVARIABLE

于 2010-07-24T16:50:03.120 回答
2

感谢您的所有回复。我使用自定义属性将一些 UserID 数据添加到生成的文档中,这足以“跟踪”文档并能够稍后将其导入。

http://msdn.microsoft.com/en-us/library/dhxe2d75.aspx

于 2013-10-28T20:10:37.370 回答
1

不,如果您在此 zip 文件中添加任何内容,Word 将开始抱怨文件损坏。但不要重新发明轮子。Word 文档可以有多个不同的文档属性。就用那个。 http://office.microsoft.com/en-gb/word-help/add-property-information-to-a-document-HA010163766.aspx

于 2010-06-22T15:40:21.907 回答