【问题标题】:How to read metadata information from docx documents?如何从 docx 文档中读取元数据信息?
【发布时间】:2012-03-13 12:57:14
【问题描述】:

我需要实现的是有一个word文档模板(docx),里面会包含Title、Author name、Date等。

然后用户将使用此模板来完成它。我需要创建一个 c# 程序,它将接收 docx 文件并读取所有感兴趣的信息(标题、名称、日期、..)。

所以我的问题是:

  1. 如何将元数据放入模板中,说明:这是标题、这是日期、这是名称等? (不是以编程方式)

  2. 如何以编程方式读取该信息?

【问题讨论】:

  • 任何带有完整源代码示例的最终解决方案?

标签: c# .net openxml docx


【解决方案1】:

解决此问题的一种方法是使用内容控件。在 Office 中,您可以创建您的模板,然后对于您各自感兴趣的每个输入,您可以放置​​其中一个控件。它们位于 Office 的“开发人员”选项卡下。

插入控件后,您需要为每个控件指定一个唯一名称。 Office 将允许它们都具有相同的名称,但您需要在模板文档中唯一标识它们。

您现在需要获取输入到这些控件的数据。同样,可能有一些更好的解决方案,但 Eric White 拥有各种很棒的 OpenXML 东西,所以这是他的一个:Iterating over Content Controls

我认为查找嵌套在表格中的内容控件存在问题。所以,如果你这样做,那么我认为你必须专门循环表格的元素才能找到其中的内容控件。

另外,您可能希望从您的 .doct 文件中保存一个 .docx,我认为 OpenXML 中没有任何内置的“单线”方法;但是,您可以创建一个新的Word文档,然后将模板的文件流写入新创建的docx文件。同样,当然,可能还有更好的解决方案。

你来过这里吗?有很多好东西: Introduction to OpenXML

此外,Eric 在OpenXML YouTube channel 上发布了越来越多的视频

【讨论】:

  • 非常感谢您指出这一点,杰西,它帮助我解决了我的问题。干杯
【解决方案2】:

1)我如何将元数据放入模板中说:这是标题, 这是日期,这是名称,等等? (不是以编程方式)

您可以在 MS Word 2010 的“信息”选项卡上执行此操作,如下所示:

2) 我如何以编程方式读取该信息?

创建文档(或模板)后,您始终可以使用 Open XML SDK 2.0 Productivity Tool(与 OpenXML SDK 一起安装)查看它的内部,以查看从何处(使用哪些类)获取/设置一些信息/记录。

另外我认为这篇文章可能会帮助您解决您的任务: Add and update custom document properties in a docx


更新:

嗨,戴夫,

请查看这篇 MSDN 文章 - Retrieving Application Properties from Word 2010 Documents by Using the Open XML SDK 2.0

希望这正是您正在寻找的。​​p>

【讨论】:

  • 嗨,谢谢,但我刚刚与该工具的人核实过,显然添加额外信息不是一个选项,因为用户不想添加相同的信息两次: /我只需要找出如何获取内容控件的内容
  • 嗨,戴夫,我刚刚更新了我上面的帖子(见 UPDATE 字后)。请随时将我的帖子标记为您问题的答案(如果是的话)。
  • Nuget 中的 OpenXML 是 Open XML SDK 2.0.0 nuget.org/packages/OpenXmlSdk 但不是 Open XML SDK 2.5.0
【解决方案3】:

所有 OpenXML 文档都内置了核心元数据,通过System.IO.Packaging 可以满足您的需求。使用 c# 中的 open xml sdk 打开 word 文件后,您可以通过 PackageProperties 类获取这些值。您可以使用 11 个属性。

您“鼓励”您的用户使用 Word 的文档信息面板 (DIP) 输入元数据。

当他们打开您的模板时,您可以通过模板的开发人员工具栏中的设置默认强制启用此功能。请参阅following article,了解如何在模板中进行设置。

我编写了一个快速的 Windows 窗体应用程序,它使用 open xml sdk 调用上面显示的 Word 文件的 PackageProperties 来显示此信息。

Here is the full solution 包含示例 word 文件。

希望这会有所帮助。

【讨论】:

  • 嗨,谢谢,但我刚刚与该工具的人核实过,显然添加额外信息不是一个选项,因为用户不想添加相同的信息两次: /我只需要找出如何获取内容控件的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 2014-05-27
  • 2014-03-31
相关资源
最近更新 更多