首页 文章

使用merge(SimpleField)字段从.dotx生成.docx

提问于
浏览
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 .

提前致谢!

3 回答

  • 0

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

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

  • 2

    这是"C# OpenXML Mail Merge Complete Example" 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) .

  • 4

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

相关问题