【问题标题】:Is it possible to add some data to a Word document?是否可以将一些数据添加到 Word 文档中?
【发布时间】:2011-03-06 21:20:55
【问题描述】:

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

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

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

【问题讨论】:

  • 您是指实际上不属于文档的数据?这似乎违反直觉。我不希望文字处理器处理、生成或保存与我的文档无关的数据。
  • 数据应附加到文件/文档中,但用户在 Word 应用程序中不能(轻松)访问

标签: .net ms-word ms-office word-2007


【解决方案1】:

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

  1. 将文档的扩展名重命名为 .zip。解压。
  2. 在根文件夹中,找到 [Content_Types].xml 文件并打开它。
  3. &lt;Type/&gt; 根目录下 元素,添加<Default Extension="ini" ContentType="custom/ini"/>(注意 - 对于另一个文件,只需确保 扩展名匹配你的文件 要添加和属性 Extention 匹配。为了 ContentType 属性,可以是 任何东西)。
  4. 现在将您的 filename.ini 文件添加到 包裹。您可以在任何地方添加它 - 根,/word 路径,新的 /word/MyIniFiles 之类的文件夹。
  5. 接下来,建立一个关系 您的文件和文件。如果你 不要,文件不会随身携带 文档。导航到 \word_rels\document.xml.rels 文件, 并在&lt;Relationships/&gt;下添加 像<Relationship Id="rd1" Type="http://schemas.microsoft.com/office/2007/relationships/ini" Target="abcpy.ini" /> 这样的东西 属性 Id 是您的 Type 中的唯一名称(最好坚持使用 rIDX 或类似的东西),Type 反映了一个 URI( 几乎任何东西)和Target是 你的文件的相对路径 添加。我将 abcpy.ini 添加到 /word 文件夹在同一个 根为 document.xml,所以我的 相对路径只是文件名。 如果我将它添加到下面的文件夹中 /word 被称为 myIniFilesTarget 将是 myIniFiles/abcpy.ini
  6. 保存所有内容。从根目录重新压缩文件并将文档重新命名为原始名称和 扩展回 .docx。复制/粘贴原始文件。完成。

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    How to: Add Custom XML Parts to Documents Without Starting Microsoft Office

    【讨论】:

    • 微软没有围绕您所描述的技术存在一些法律问题吗?据我记得(从某个地方),他们被要求要么用补丁禁用它,要么支付一些报销。你有这样的信息吗,还是我弄错了?
    • @Shade:我想你指的是blogs.technet.com/b/gray_knowlton/archive/2010/01/11/…。来自该链接的大量好读物。
    • @razor:如果您正在寻找添加 XML 文件,这个答案是正确的。如果您正在查看任何其他文件类型,请参见上文。 +1 为 0xA3。
    • @Shade:只是为了让 Otaku 的评论更清楚一点:这种向文档添加自定义、任意 XML 部分的方式与自定义 XML 不同技术>标记 Microsoft 必须删除。这很令人困惑,因为使用的名称非常相似。
    • 感谢您的澄清。我现在看到了区别。
    【解决方案3】:

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

    见:

    What is a DOCVARIABLE in word

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 这是一个可接受的解决方案。风险在于最终用户可以访问此内容并可能删除您的自定义属性。因此,如果您使用的属性不存在,最好不要破坏您的代码。
      • 他们不能只是再次上传具有更改值(或没有它们)的文档。我不记得知道它是如何工作的。
      【解决方案5】:

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

      【讨论】:

      • 感谢所有信息!有非常有用的。目前,我使用自定义属性来标记带有一些 UserID 数据的文档。
      猜你喜欢
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 2016-05-24
      相关资源
      最近更新 更多