I'm using OpenXmlPowerTools to merge several report template Microsoft Word.
var sources = new List<Source>();
foreach (var fileName in fileName_List)
{
using (FileStream stream = System.IO.File.Open(filename, FileMode.Open))
{
var memoryStream= new MemoryStream();
stream.CopyTo(memoryStream);
sources.Add(new Source(new WmlDocument("", memoryStream), true));
}
}
var mergedDoc = DocumentBuilder.BuildDocument(sources);
mergedDoc.SaveAs(resultFile);
in this case, all the files will be merged well without any problem. But I need to make some changes on each file before they merge. I used the below code :
foreach (var filename in fileName_List)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(filename, true))
using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
{
var docText = sr.ReadToEnd();
docText = docText.Replace("PlaceHolder", "NewValue");
using (var memoryStream= GenerateStreamFromString(docText))
{
sources.Add(new Source(new WmlDocument("", memoryStream), true));
}
}
}
public static MemoryStream GenerateStreamFromString(string s)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
This time I get the following error when mergedDoc.SaveAs(resultFile) called :
File contains corrupted data
Also, I used the below code instead of the GenerateStreamFromString method and again get the same error:
var docText = sr.ReadToEnd();
docText = docText.Replace("PlaceHolder", "NewValue");
byte[] bytes = Encoding.ASCII.GetBytes(docText);
sources.Add(new Source(new WmlDocument("", bytes), true));