简体   繁体   中英

OpenXML Merge Word Documents Formatting of multiple files

I have multiple template docx files which I am trying to merge together. If the first file is formatted as two columns, when I merge the files it automatically sets the next files as multiple column word document and changes the formatting even if it was a one column file previously before the merge. However, when i select the normal docx file with no multiple columns first, it tries to set all the multiple column text into a single column and changes the formatting.

I am trying to merge these documents without any formatting changing. Heres my code so far:

 private void MergeDocuments()
{

    bool docfilechecked = keepworddoc.Checked;
    string caseno = casetextboxinput.Value;
    string nameno = patentee;

    string[] mergeFiles = Directory.GetFiles(directoryrootmerge + caseno + @"\", sequenceCounter + "*.doc*")
       .Select(Path.GetFullPath)
       .ToArray();

    string filename = caseno + @" - " + nameno + " - PoA Form.docx";
    string directory = directoryrootmerge + caseno;
    string outputFileName = directoryrootmerge + caseno + @"\" + caseno + @" - " + nameno + " - PoA Form.docx";
    //string outputFileName2 = directoryrootmerge + caseno + @"\" + caseno + @" - " + nameno + "- PoA Form.pdf";


    if (mergeFiles.Length == 1)
    {
        System.IO.File.Copy(mergeFiles[0], outputFileName, true);
    }
    else
    {
        for (int i = 1; i < mergeFiles.Length; i++)
            using (WordprocessingDocument myDoc = WordprocessingDocument.Open(mergeFiles[0], true))
            {
                MainDocumentPart mainPart = myDoc.MainDocumentPart;
                string altChunkId = "AltChunkId" + i;

                //Append page break
                Paragraph para = new Paragraph(new Run((new DocumentFormat.OpenXml.Wordprocessing.Break() { Type = BreakValues.Page })));
                mainPart.Document.Body.InsertAfter(para, mainPart.Document.Body.LastChild);

                AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
                    AlternativeFormatImportPartType.WordprocessingML, altChunkId);
                using (FileStream fileStream = System.IO.File.Open(mergeFiles[i], FileMode.Open))
                {
                    chunk.FeedData(fileStream);
                 }

                AltChunk altChunk = new AltChunk();
                altChunk.Id = altChunkId;
                //new page, if you like it...
                //mainPart.Document.Body.AppendChild(new Paragraph(new Run(new DocumentFormat.OpenXml.Wordprocessing.Break() { Type = BreakValues.Page })));
                mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements<DocumentFormat.OpenXml.Wordprocessing.Paragraph>().Last());
                mainPart.Document.Save();
                myDoc.Close();
                System.IO.File.Copy(mergeFiles[0], outputFileName, true);

            }
    }
}

I have added a page break after each file to see if that resets the formatting on merge but doesnt seem to work - can anyone see where i might be going wrong?

Have you seen the OpenXML PowerTools? They contain code to combine OpenXML documents...

DocumentBuilder of PowerTools

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM