如何从docx文档中读取元数据信息?

时间:2012-03-13 12:57:15

标签: c# .net openxml docx

我需要实现的是拥有一个word文档模板(docx),它将包含标题,作者姓名,日期等。

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

所以我的问题是:

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

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

3 个答案:

答案 0 :(得分:8)

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

插入控件后,每个控件都需要具有唯一名称。 Office会让所有人都具有相同的名称,但您需要在模板文档中唯一标识所有这些名称。

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

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

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

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

此外,Eric已经在OpenXML YouTube channel

上发布了越来越多的视频

答案 1 :(得分:7)

  

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

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

How to set manually the MS Word document properties like Author, Title, etc...

  

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

创建文档(或模板)之后,您可以随时查看Open XML SDK 2.0生产力工具(与OpenXML SDK一起安装),以查看获取/设置某些内容(使用哪些类)来自/来自文件的信息。

Open XML SDK 2.0 Productivity Tool

此外,我认为这篇文章可能会帮助您解决任务: 的 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

希望这正是您所寻找的。

答案 2 :(得分:5)

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

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

enter image description here   您可以在打开模板时通过开发人员工具栏中的模板设置强制启用此功能。有关如何在模板中设置此内容,请参阅following article

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

enter image description here

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

希望这有帮助。