44 votes

Enregistrer le WordprocessingDocument modifié dans un nouveau fichier

J'essaie d'ouvrir un document Word, de modifier du texte, puis d'enregistrer les modifications dans un nouveau document. Je peux faire le premier pas en utilisant le code ci-dessous, mais je ne sais pas comment enregistrer les modifications dans un NOUVEAU document (en spécifiant le chemin et le nom du fichier).

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using DocumentFormat.OpenXml.Packaging;
using System.IO;

namespace WordTest
{
class Program
{
    static void Main(string[] args)
    {
        string template = @"c:\data\hello.docx";
        string documentText;

        using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(template, true))
        {
            using (StreamReader reader = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
            {
                documentText = reader.ReadToEnd();
            }


            documentText = documentText.Replace("##Name##", "Paul");
            documentText = documentText.Replace("##Make##", "Samsung");

            using (StreamWriter writer = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
            {
                writer.Write(documentText);
            }
        }
      }
    }
}

Je suis un débutant complet dans ce domaine, alors pardonnez la question de base !

44voto

amurra Points 8822

Si vous utilisez un MemoryStream vous pouvez enregistrer les modifications dans un nouveau fichier comme ceci :

 byte[] byteArray = File.ReadAllBytes("c:\\data\\hello.docx");
using (MemoryStream stream = new MemoryStream())
{
    stream.Write(byteArray, 0, (int)byteArray.Length);
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(stream, true))
    {
       // Do work here
    }
    // Save the file with the new name
    File.WriteAllBytes("C:\\data\\newFileName.docx", stream.ToArray()); 
}

5voto

Mohamed Alikhan Points 183

Copiez simplement le fichier source vers la destination et apportez des modifications à partir de là.

 File.copy(source,destination);
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(destination, true))
    {
       \\Make changes to the document and save it.
       wordDoc.MainDocumentPart.Document.Save();
       wordDoc.Close();
    }

Espérons que cela fonctionne.

2voto

pimbrouwers Points 5499

Cette approche vous permet de mettre en mémoire tampon le fichier "modèle" sans tout mettre en lots dans un byte[] , ce qui lui permet peut-être de consommer moins de ressources.

 var templatePath = @"c:\data\hello.docx";
var documentPath = @"c:\data\newFilename.docx";

using (var template = File.OpenRead(templatePath))
using (var documentStream = File.Open(documentPath, FileMode.OpenOrCreate))
{
    template.CopyTo(documentStream);

    using (var document = WordprocessingDocument.Open(documentStream, true))
    {
        //do your work here

        document.MainDocumentPart.Document.Save();
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X