在现有docx文档中动态添加合并域

时间:2011-07-25 07:53:50

标签: add openxml docx mergefield

是否可以在不使用互操作的情况下将合并域添加到现有.docx文档,只能使用CodeBehind中的开放SDK进行处理?

1 个答案:

答案 0 :(得分:2)

是的,这是可能的,我在下面创建了一个小方法,您只需传递要分配给合并字段的名称,然后它就会为您创建。 下面的代码用于创建一个新文档,但它应该很容易使用该方法附加到现有文档,希望这可以帮助您:

using System;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            using (WordprocessingDocument package = WordprocessingDocument.Create("D:\\ManualMergeFields.docx", WordprocessingDocumentType.Document))
            {
                package.AddMainDocumentPart();

                Paragraph nameMergeField = CreateMergeField("Name");
                Paragraph surnameMergeField = CreateMergeField("Surname");

                Body body = new Body();
                body.Append(nameMergeField);
                body.Append(surnameMergeField);
                package.MainDocumentPart.Document = new Document(new Body(body));
            }
        }

        static Paragraph CreateMergeField(string name)
        {
            if (!String.IsNullOrEmpty(name))
            {
                string instructionText = String.Format(" MERGEFIELD  {0}  \\* MERGEFORMAT", name);
                SimpleField simpleField1 = new SimpleField() { Instruction = instructionText };

                Run run1 = new Run();

                RunProperties runProperties1 = new RunProperties();
                NoProof noProof1 = new NoProof();

                runProperties1.Append(noProof1);
                Text text1 = new Text();
                text1.Text = String.Format("«{0}»", name);

                run1.Append(runProperties1);
                run1.Append(text1);

                simpleField1.Append(run1);

                Paragraph paragraph = new Paragraph();
                paragraph.Append(new OpenXmlElement[] { simpleField1 });
                return paragraph;
            }
            else return null;
        }
    }
}

您可以从此网址下载Open Xml Productivity Tool(如果您还没有)http://www.microsoft.com/download/en/details.aspx?id=5124 此工具具有“反射代码”功能。因此,您可以在MS Word文档中手动创建合并字段,然后使用生产力工具打开文档 并查看一个关于如何在代码中执行此操作的C#代码示例!这是非常有效的,我使用这个精确的工具来创建上面的示例。祝你好运