0
votes

Remplir des données de modèle Word à l'aide de OpenXML SDK

J'ai un modèle de fichier Word et un fichier XML pour les données. Je souhaite trouver le contrôle de contenu de contenu dans Word et obtenir des données de XML, puis remplacer le texte dans le modèle Word. J'utilise le code suivant, mais il ne met pas à jour le fichier Word. XXX


0 commentaires

3 Réponses :


1
votes

Je pense que vous devriez écrire des modifications au fichier temporaire. Voir Enregistrer modifié WordProcessingDocument vers un nouveau fichier ou mon code à partir du projet de travail:

    MemoryStream yourDocStream = new MemoryStream();
    ... // populate yourDocStream with .docx bytes
    using (Package package = Package.Open(yourDocStream, FileMode.Open, FileAccess.ReadWrite))
    {
        //  Load the document XML in the part into an XDocument instance.  
        PackagePart packagePart = LoadXmlPackagePart(package);
        XDocument xDocument = XDocument.Load(XmlReader.Create(packagePart.GetStream()));

        // making changes

        //  Save the XML into the package  
        using (XmlWriter xw = XmlWriter.Create(packagePart.GetStream(FileMode.Create, FileAccess.Write)))
        {
            xDocument.Save(xw);
        }

        var resultDocumentBytes = yourDocStream.ToArray();
    }


0 commentaires

0
votes

L'approche de base que vous utilisez fonctionne bien, mais je suis surpris que vous n'obtenez aucune erreur de compilation de compilation car xxx pré>

n'est pas compatible avec P>

using (WordprocessingDocument document = WordprocessingDocument.CreateFromTemplate(txtWordFile.Text))
{
    MainDocumentPart mainPart = pkgDoc.MainDocumentPart;

    SdtBlock block = mainPart.Document.Body.Descendants<SdtBlock>().Where
            (r => r.SdtProperties.GetFirstChild<Tag>().Val == "test1").FirstOrDefault();

    Text t = block.Descendants<Text>().Single();
    t.Text = "13,450,542";

    mainPart.Document.Save();
}


0 commentaires

2
votes

Pour quiconque en difficulté avec ceci - vous pouvez consulter cette bibliothèque https://github.com/antonmihaylov/ Openxmltempates

avec elle, vous pouvez remplacer le texte à l'intérieur de toutes les commandes de contenu du document en fonction d'un objet JSON (ou d'un dictionnaire de base C #) sans écrire du code spécifique, mais vous spécifiez le nom de la variable dans la balise du contrôle du contenu.

(Note - Je suis le fabricant de cette bibliothèque, mais il est ouvert à la source et sous licence sous LGPLV3)


0 commentaires