正如标题所述,我正在尝试将多个单词(.docx)文件合并到一个单词文档中。这些文档中的每一个都是一页长。我在这个实现中使用了这篇文章中的一些代码。我遇到的问题是只有第一个文档被正确写入,每隔一个迭代都会附加一个新文档,但文档内容与第一个文档内容相同。
这是我正在使用的代码:
//list that holds the file paths
List<String> fileNames = new List<string>();
fileNames.Add("filePath");
fileNames.Add("filePath");
fileNames.Add("filePath");
fileNames.Add("filePath");
fileNames.Add("filePath");
//get the first document
MemoryStream mainStream = new MemoryStream();
byte[] buffer = File.ReadAllBytes(fileNames[0]);
mainStream.Write(buffer, 0, buffer.Length);
using (WordprocessingDocument mainDocument = WordprocessingDocument.Open(mainStream, true))
{
//xml for the new document
XElement newBody = XElement.Parse(mainDocument.MainDocumentPart.Document.Body.OuterXml);
//iterate through eacah file
for (int i = 1; i < fileNames.Count; i++)
{
//read in the document
byte[] tempBuffer = File.ReadAllBytes(fileNames[i]);
WordprocessingDocument tempDocument = WordprocessingDocument.Open(new MemoryStream(tempBuffer), true);
//new documents XML
XElement tempBody = XElement.Parse(tempDocument.MainDocumentPart.Document.Body.OuterXml);
//add the new xml
newBody.Add(tempBody);
string str = newBody.ToString();
//write to the main document and save
mainDocument.MainDocumentPart.Document.Body = new Body(newBody.ToString());
mainDocument.MainDocumentPart.Document.Save();
mainDocument.Package.Flush();
tempBuffer = null;
}
//write entire stream to new file
FileStream fileStream = new FileStream("xmltest.docx", FileMode.Create);
mainStream.WriteTo(fileStream);
//ret = mainStream.ToArray();
mainStream.Close();
mainStream.Dispose();
}
同样的问题是,正在创建的每个新文档都与第一个文档具有相同的内容。所以当我运行它时,输出将是一个包含五个相同页面的文档。我尝试在列表中切换文档顺序并获得相同的结果,因此它不是特定于一个文档的。谁能建议我在这里做错了什么?我正在查看它,但我无法解释我所看到的行为。任何建议,将不胜感激。非常感谢!
编辑:我认为这可能与我尝试合并的文档是使用自定义 XML 部件生成的事实有关。我认为文档中的 Xpath 以某种方式指向相同的内容。问题是我可以打开这些文档中的每一个并查看正确的内容,只是当我合并它们时我才看到问题。