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...
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.