1

所以,首先这是我打开 dotx 并创建一个新的 docx 副本(然后修改副本)的代码。为简洁起见,但本质上需要 3 个参数一个数据表(以使其可供遗留系统使用),UNC 路径作为模板的字符串和 UNC 路径作为输出文档的字符串:

using (WordprocessingDocument docGenerated = WordprocessingDocument.Open(outputPath, true))
{
    docGenerated.ChangeDocumentType(WordprocessingDocumentType.Document);

    foreach (SimpleField field in docGenerated.MainDocumentPart.Document.Descendants<SimpleField>())
    {
        string mergeFieldName = GetFieldName(field).Trim();

        DataRow[] dr = dtSchema.Select("FieldName = '" + mergeFieldName + "'");

        if (dr.Length > 0)
        {
            string runProperties = string.Empty;
            foreach (RunProperties property in field.Descendants<RunProperties>())
            {
                runProperties = property.OuterXml;
                break;
            }

            Run run = new Run();
            run.Append(new RunProperties(runProperties));
            run.Append(new Text(dr[0]["FieldDataValue"].ToString()));

            field.Parent.ReplaceChild<SimpleField>(run, field);
        }
    }

    docGenerated.MainDocumentPart.Document.Save();
}

我最初所做的是采用 .dot 模板并将其重新保存为 .dotx 并交叉手指,但没有用。因此,我尝试删除 .dotx 中的所有合并字段并再次添加它们。这有效 - 但它只会找到一个合并字段(作为 SimpleField),特别是在保存 .dotx 之前添加的最后一个。使用开放的 XML 生产力工具进一步查看模板,我可以看到所有其他合并字段的类型均为 w:instrText,这就是它们被忽略的原因。

我实际上只是从 OpenXML 开始,因为我们正在寻找用它来替换我们当前的办公自动化,所以我目前知之甚少。有人可以进一步指导我或指出一个好的资源吗?我用谷歌搜索了一下,但找不到我的具体问题。我试图推迟阅读整个 SDK 文档(我知道,我知道!),因为我需要快速组合解决方案,所以我专注于一项任务,即采用我们现有的 .dot 模板,将它们转换为.dotx,只需将合并字段替换为数据即可派生 .docx。

提前致谢!

4

3 回答 3

4

使用 OpenXml - 您不需要为模板使用 .dotx,而是可以直接使用 DocX 制作模板。学习 OpenXML 的一个很好的资源显然是http://openxmldeveloper.org/,你可以在那里找到一个很好的pdf阅读。

还值得一看第三方 API docx.codeplex.com,我现在正在使用它为我的公司开发服务器端文档自动化解决方案。请参阅示例http://cathalscorner.blogspot.co.uk/2009/08/docx-v1007-released.html这与您的场景类似.. 将字段与数据合并.. 希望这会有所帮助..

于 2012-03-22T16:09:54.313 回答
2

这是“C# OpenXML 邮件合并完整示例”的链接http://www.jarredcapellman.com/2012/10/22/c-openxml-mail-merge-complete-example/

我用它来更新我的 Web 应用程序代码,该代码用于处理 .DOC (.DOT) 文件中的合并字段(并且需要安装 MS Word 并在 Web 服务器上配置相应的 DCOM)。现在,该解决方案只需要在 Web 服务器上安装 OpenXML SDK 2.0 并将 .DOC (.DOT) 模板另存为 .DOCX (.DOTX)。

于 2013-03-07T03:59:15.837 回答
0

如果你想使用内容控件,你也可以试试 WordDocumentGenerator。WordDocumentGenerator 是一个使用 Visual Studio 2010 和 Open XML 2.0 SDK @ http://worddocgenerator.codeplex.com从模板生成 Word 文档的实用程序

于 2012-03-22T21:40:14.927 回答