Frage

Ist es möglich, einen bestehenden Mergefields hinzuzufügen? .docx Dokument ohne Interop, nur mit offenem SDK von CodeBehind zu behandeln?

Keine korrekte Lösung

Andere Tipps

Ja, das ist möglich. Ich habe unten eine kleine Methode erstellt, bei der Sie einfach den Namen durchgeben, den Sie dem Fersionsfeld zuweisen möchten, und es für Sie erstellt. Der folgende Code dient zum Erstellen eines neuen Dokuments, aber es sollte einfach genug sein, die Methode zu verwenden, um sich an ein vorhandenes Dokument anzuhängen. Ich hoffe, dies hilft Ihnen:

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;
        }
    }
}

Sie können das Open XML -Produktivitätstool von dieser URL herunterladen (wenn Sie es noch nicht haben) http://www.microsoft.com/download/en/details.aspx?id=5124 Dieses Tool verfügt über eine "Reflect Code" -Funktionalität . So können Sie manuell ein Merge -Feld in einem MS -Word -Dokument erstellen und dann das Dokument mit dem Produktivitätstool öffnen und ein C# Code -Beispiel dafür sehen Erstellen Sie das Beispiel oben. Gutes Glück

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top