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

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

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

所以我的问题是:

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

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

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

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

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

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

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

你来过这里? 有很多好东西: OpenXML简介

此外,Eric还在OpenXML YouTube频道上发布了越来越多的video

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

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

如何手动设置MS Word文档属性,如作者,标题等...

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

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

打开XML SDK 2.0生产力工具

此外,我认为这篇文章可能会帮助您解决任务: 在docx中添加和更新自定义文档属性


更新:

嗨戴夫,

请查看此MSDN文章 – 使用Open XML SDK 2.0从Word 2010文档中检索应用程序属性

希望这正是你要找的。

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

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

在此处输入图像描述 您可以在打开模板时通过模板的开发人员工具栏中的设置默认强制启用此function。 请参阅以下有关如何在模板中设置此内容的文章 。

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

在此处输入图像描述

这是包含示例文件的完整解决方案 。

希望这可以帮助。