使用来自XML文件的数据生成Word文档(docx)/基于模板将XML转换为Word文档

Slayernoah

我有一个XML文件,其中包含需要在Word文档中填充的数据。

我需要找到一种方法来定义一个模板,该模板可用作从XML文件填充数据并创建输出文档的基线。

我相信有两种方法可以做到这一点。

  1. 创建一个XSLT文件,它将成为“模板”,并使用它与XML文件一起使用以生成Word文档。
  2. 使用Word中的内容控件创建模板文档,并以某种方式映射到XML文件。

我只是不知道如何实现任何一种方式的细节。还是不确定是否存在另一种更简单的方法来完成此任务。

有人可以举例说明如何实现它。仅举一个简单的例子就足够了。

我更喜欢C#进行任何编码。我正在使用Word 2016,但希望它与Word 2007到Word 2016以及两者之间的所有内容(如果可能)兼容,因为用户将使用这些版本。谢谢!

Slayernoah

弄清楚如何使用内容控件生成文档以及如何将数据从XML填充到内容控件中。我将其分为两部分:

  • 第1部分:创建模板文档以生成文档
  • 第2部分:使用C#中的代码基于模板生成文档

第1部分:创建模板文档以生成文档

  1. 创建一个示例XML,您可以基于该示例创建用于文档生成的Word模板。最好从一个不太复杂的版本开始以掌握它。

我使用以下XML进行测试。为了进行测试,我没有重复的部分,图片等。

<?xml version="1.0" encoding="utf-8"?>
<mydata xmlns="http://CustomDemoXML.htm">
    <field1>This is the value in field1 from the XML file</field1>
    <field2>This is the value in field2 from the XML file</field2>
    <field3>This is the value in field3 from the XML file</field3>
</mydata>

注意1:这只是创建Word模板示例XML从模板生成Word文档时,以后可以应用具有相同格式的真实数据的XML文件。

注意2:该xmlns属性实际上可以包含您想要的任何内容,并且不必是以http开头的URL。

将示例XML文件保存到任何位置,以便可以将其导入到您要创建的模板中。

  1. 确保Developer在您的Word副本上启用选项卡[ File-> Options-> Customize Ribbon-> Under Customize the Ribbon,请确保Developer已选择-> OK]。详细信息:如何:在功能区上显示“开发人员”选项卡

  2. 创建一个新的Word文档(或使用现有的Word文档),它将作为您生成文档的模板。

  3. Developer选项卡上,单击XML Mapping Pane这将XML Mapping Pane在文档的右侧打开

  4. 在XML映射窗格上,选择Custom XML Part下拉菜单->选择(Add new part)

  5. 选择在步骤1->中保存的XML文件Open

  6. 在XML映射窗格上,选择Custom XML Part下拉菜单->选择xmlns包含自定义XML文件属性上的文本的项目如果使用上面的示例文件,则为http://CustomDemoXML.htm

  7. 在Word文档中添加一些静态文本,Plain Text Content Control然后在它旁边添加一个静态文本(在Developer选项卡->Controls部分。对需要添加的所有字段重复此操作。

对于上面的示例XML,我有以下Word文档:

Word文档模板样本

  1. 单击第一个Plain Text Content Control->在XML Mapping Pane上,右键单击要映射到该内容控件的字段->单击Map to Selected Content Control对要映射的所有字段重复此操作。

注意:或者,Plain Text Content Control您可以在XML Mapping Pane上右键单击要映射的字段->单击Insert Content Control->单击,而不是在步骤#8中从开发人员选项卡添加项目Plain Text

同样,您还可以添加其他类型的控件,例如复选框,日期选择器,甚至是重复节(它也支持嵌套的重复节!-自Word 2013起),并将XML中的数据映射到仅使用本机Word功能且没有任何第三方的数据工具!

  1. 保存您的模板文档。

第2部分:使用C#中的代码基于模板生成文档

它使用Microsoft推荐的OpenXML SDK使用包含真实数据的XML文件生成文档。

  1. 构建您的XML文件/打开一个现有的XML文件,使用该文件从上面创建的模板生成文档。该格式必须与用于创建模板的示例XML文件的格式相同。

  2. 使用OpenXML SDK删除CustomXMLPart文档中的所有元素。假定在文档中没有使用其他自定义XML部件,在本示例中就是这种情况。对于复杂的场景,您可以根据需要删除特定的XML部分。

  3. CustomXMLPart在上述步骤1中,使用OpenXML SDK添加基于XML文件的新文件。

这是示例代码,我必须使用包含真实数据的XML文件中的数据“刷新” /“重新加载”模板中的示例数据(假设已经创建并保存了用于生成文档的XML文件):

using System.IO;
using DocumentFormat.OpenXml.Packaging;

namespace SampleNamespace
{
    public static class SampleClass
    {
        public static void GenerateDocument()
        {
            string rootPath = @"C:\Temp";
            string xmlDataFile = rootPath + @"\MyNewData.xml";
            string templateDocument = rootPath + @"\MyTemplate.docx";
            string outputDocument = rootPath + @"\MyGeneratedDocument.docx";

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(templateDocument, true))
            {
                //get the main part of the document which contains CustomXMLParts
                MainDocumentPart mainPart = wordDoc.MainDocumentPart;

                //delete all CustomXMLParts in the document. If needed only specific CustomXMLParts can be deleted using the CustomXmlParts IEnumerable
                mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts);

                //add new CustomXMLPart with data from new XML file
                CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
                using (FileStream stream = new FileStream(xmlDataFile, FileMode.Open))
                {
                    myXmlPart.FeedData(stream);
                }
            }

        }
    }
}

而已!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将 XML Word 文档转换为 DOCX?

如何使用C#将Word文档(基于XML)转换为PDF?

将DOCX / Word生成的XML转换为JSON

使用 VBA 将多个 Word 文档转换为 HTML 文件

使用 Open XML 将 XML 文件中的数据读取到 Word 文档中,创建一个表格

如何将Markdown(或类似文件)转换为Word文档?

将AngularJS转换为Word文档

将Word文档批量转换为PDF

使用php将pdf转换为word文档

使用Python将Microsoft Word文档转换为PDF

使用 Python 将 Microsoft Word 文档页面转换为单独的 jpg 文件

是否可以将Word文档转换为Google文档?

从Word文档转换为本地Google文档

使用 XSL 将 XML 文档转换为 HTML 时出错

使用C#将Word文档转换为文本文档

将“文档格式” / XML转换为CSV

使用XML直接签名Office Word文档

Docx4j在Word文档中默认将XML写入

如何将 OpenXML 从模板创建的 Word 文档转换为 MemoryStream?

将具有“.dotx”扩展名(模板)的文件转换为“docx”(Word 文件)

使用XSLT模板将一个Xml文档转换为另一个Xml文档时的空节点值

从 Word 文档生成 .hhk 文件

Word文档的XML / XSD验证

将XML生成的Word DOCX反向工程回XML

如何将gridview模板化的Item数据保存到DB中以及生成Word文档?

如何使用熊猫从Word文档(.docx)文件中的表创建数据框

循环浏览PDF文件并将其转换为Word文档

使用办公室无法将文档转换为docx

如何将Word文档转换为单个.html网页?