Open XML 使用AltChunks合并Word文档时排序异常问题求助
问题原因
你遇到的顺序错误是插入参照节点选择错误导致的:
代码中每次插入AltChunk时,以docTarget.Body.Descendants<Paragraph>().Last()作为插入参照节点,但AltChunk不属于Paragraph类型,不会被Descendants<Paragraph>()检索到,所以这个参照节点永远是第一份模板文档的最后一个段落。多次在同一个节点后插入新元素时,新插入的元素会排在前一次插入元素的前面,最终就得到了倒序的合并结果。
修复方法
只需要修改插入AltChunk的代码行,将参照节点改为当前Body的最后一个子元素即可:
把原代码中的
docTarget.Body.InsertAfter(ac, docTarget.Body.Descendants<DocumentFormat.OpenXml.Wordprocessing.Paragraph>().Last());
替换为:
docTarget.Body.InsertAfter(ac, docTarget.Body.LastChild);
可选优化
你当前处理源文档的逻辑是直接以可写模式打开原始文件并修改保存,会改动你文件夹内的原始docx文档,如果不希望修改源文件,可以先将源文件复制为临时文件,再处理临时文件完成合并。
内容的提问来源于stack exchange,提问作者Ken B
相关产品推荐
相关产品推荐

