Genera un documento Word (docx) utilizzando i dati da un file XML / Converti XML in un documento Word basato su un modello

 C Programming >> Programmazione C >  >> Tags >> DocX
Genera un documento Word (docx) utilizzando i dati da un file XML / Converti XML in un documento Word basato su un modello

Capito come utilizzare i controlli del contenuto per generare documenti e come popolare i dati da un XML nei controlli del contenuto. L'ho diviso in 2 parti:

  • Parte 1:crea il tuo modello di documento per la generazione di documenti
  • Parte 2:usa il codice in C# per generare documenti in base al modello

Parte 1:crea il tuo modello di documento per la generazione di documenti

  1. Crea un XML di esempio in base al quale puoi creare il modello di Word per la generazione di documenti. Preferibilmente iniziare con una versione meno complicata per prendere la mano.

Ho usato il seguente XML per il test. Per i test non avevo sezioni ripetute, immagini ecc.

<?xml version="1.0" encoding="utf-8"?>
<mydata xmlns="http://CustomDemoXML.htm">
    <field1>This is the value in field1 from the XML file</field1>
    <field2>This is the value in field2 from the XML file</field2>
    <field3>This is the value in field3 from the XML file</field3>
</mydata>

Nota 1 :Questo sarà solo un XML di esempio per creare il tuo modello di Word. I file XML con dati reali in questo stesso formato possono essere applicati successivamente durante la generazione di documenti Word dal modello.

Nota 2 :Il xmlns l'attributo può contenere letteralmente tutto ciò che vuoi e non deve essere un URL che inizia con http.

Salva il tuo file XML di esempio in qualsiasi posizione in modo che possa essere importato nel modello che stai per creare.

  1. Assicurati che il Developer scheda è abilitata sulla tua copia di Word [File -> Options -> Customize Ribbon -> Sotto Customize the Ribbon , assicurati Developer è selezionato -> OK ]. Dettagli:Procedura:mostrare la scheda Sviluppatore sulla barra multifunzione

  2. Crea un nuovo documento Word (o usa un documento Word esistente) che sarà il tuo modello per la generazione di documenti.

  3. Sul Developer scheda, fai clic su XML Mapping Pane . Si aprirà il XML Mapping Pane sul lato destro del documento.

  4. Nel riquadro di mappatura XML, seleziona Custom XML Part menu a discesa -> Seleziona (Add new part) .

  5. Seleziona il file XML che hai salvato al passaggio 1 -> Open .

  6. Nel riquadro di mappatura XML, seleziona Custom XML Part menu a discesa -> Seleziona l'elemento con il testo che era sul xmlns attributo del file XML personalizzato. Se utilizzi il file di esempio sopra, sarebbe http://CustomDemoXML.htm .

  7. Aggiungi del testo statico a un documento di Word e aggiungi un Plain Text Content Control accanto ad esso (sul Developer scheda -> Controls sezione. Ripeti per tutti i campi che devi aggiungere.

Per l'esempio XML sopra, avevo il seguente documento Word:

  1. Fai clic sul primo Plain Text Content Control -> Nel riquadro di mappatura XML, fai clic con il pulsante destro del mouse sul campo che desideri mappare a quel controllo del contenuto -> fai clic su Map to Selected Content Control . Ripeti per tutti i campi che desideri mappare.

Nota: In alternativa, invece di aggiungere il Plain Text Content Control elementi dalla scheda sviluppatore al passaggio n. 8, puoi fare clic con il pulsante destro del mouse sul campo che desideri mappare nel riquadro di mappatura XML -> fare clic su Insert Content Control -> Fare clic su Plain Text .

Allo stesso modo, puoi anche aggiungere altri tipi di controlli come caselle di controllo, raccoglitori di date e persino sezioni ripetute (supporta anche sezioni ripetute nidificate! - da Word 2013) e mappare i dati da XML a quelli che utilizzano solo la funzionalità nativa di Word e senza terze parti strumenti!

  1. Salva il tuo modello di documento.

Parte 2:usa il codice in C# per generare documenti in base al modello

Questo utilizza l'SDK OpenXML consigliato da Microsoft per generare documenti utilizzando un file XML contenente dati reali.

  1. Crea il tuo file XML/apri un file XML esistente con cui generare un documento dal modello creato sopra. Deve essere nello stesso formato del file XML di esempio utilizzato per creare il modello.

  2. Usa l'SDK OpenXML per eliminare qualsiasi CustomXMLPart elementi del documento. Ciò presuppone che nel documento non vengano utilizzate altre parti XML personalizzate, come nel caso di questo esempio. Per scenari complessi, puoi eliminare parti XML specifiche, se necessario.

  3. Usa l'SDK OpenXML per aggiungere un nuovo CustomXMLPart in base al file XML nel passaggio 1 precedente.

Ecco il codice di esempio che devo "aggiornare"/"ricaricare" i dati di esempio nel modello con i dati di un file XML contenente dati reali (supponendo che il file XML utilizzato per generare il documento sia già creato e salvato):

using System.IO;
using DocumentFormat.OpenXml.Packaging;

namespace SampleNamespace
{
    public static class SampleClass
    {
        public static void GenerateDocument()
        {
            string rootPath = @"C:\Temp";
            string xmlDataFile = rootPath + @"\MyNewData.xml";
            string templateDocument = rootPath + @"\MyTemplate.docx";
            string outputDocument = rootPath + @"\MyGeneratedDocument.docx";

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(templateDocument, true))
            {
                //get the main part of the document which contains CustomXMLParts
                MainDocumentPart mainPart = wordDoc.MainDocumentPart;

                //delete all CustomXMLParts in the document. If needed only specific CustomXMLParts can be deleted using the CustomXmlParts IEnumerable
                mainPart.DeleteParts<CustomXmlPart>(mainPart.CustomXmlParts);

                //add new CustomXMLPart with data from new XML file
                CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
                using (FileStream stream = new FileStream(xmlDataFile, FileMode.Open))
                {
                    myXmlPart.FeedData(stream);
                }
            }

        }
    }
}

Ecco fatto!


Ok, ho trovato una guida dettagliata sull'utilizzo di XSLT come modello per generare il documento di Word qui:Utilizzo di XSLT e Open XML per creare un documento di Word 2007.

Sembra che anche se questo articolo è per Word 2007, funziona perfettamente in Word 2016.

L'unico problema con questo metodo è se in seguito sono necessarie modifiche al modello, ci vuole molto sforzo per aggiornare il file xslt e non è facile da usare poiché non può essere aggiornato in Word stesso e nell'XML effettivo del documento deve essere manipolato.

Tra i lati positivi, la generazione dei documenti è MOLTO flessibile con tutta la potenza disponibile tramite XSL (foreach, variabili, se condizioni ecc.)


No