Динамически добавлять поля слияния в существующий документ-документ - PullRequest
1 голос
/ 25 июля 2011

Можно ли добавить поля слияния к существующему документу .docx без использования взаимодействия, а только с открытым SDK из CodeBehind?

1 Ответ

2 голосов
/ 14 ноября 2011

Да, это возможно, ниже я создал небольшой метод, в котором вы просто указываете имя, которое хотите присвоить полю слияния, и оно создает его для вас. Приведенный ниже код предназначен для создания нового документа, но он должен быть достаточно простым для добавления метода к существующему документу, надеюсь, это поможет вам:

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 по этому URL (если у вас его еще нет) http://www.microsoft.com/download/en/details.aspx?id=5124 Этот инструмент имеет функцию «Отражать код». Таким образом, вы можете вручную создать поле слияния в документе MS Word, а затем открыть документ с помощью инструмента повышения производительности. и посмотрите пример кода C # о том, как это сделать в коде! Это очень эффективно, и я использовал этот точный инструмент для создания примера выше. Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...