C#合并多个Word文档(微软官方免费openxml接口)

g

cs 复制代码
 /// <summary>
        /// 合并多个word文档(合并到第一文件)
        /// </summary>
        /// <param name="as_word_paths">word文档完整路径</param>
        /// <param name="breakNewPage">true(默认值),合并下一个文档前,自动换页</param>
        /// <returns>无</returns> 
public void MergeWordFiles(string[] as_word_paths, bool breakNewPage = true)
        {
            var ls_first_word = as_word_paths.Length > 0 ? as_word_paths[0] : "";
            if (ls_first_word.fn_isempty())
            {
                return;
            }
            using (WordprocessingDocument doc = WordprocessingDocument.Open(ls_first_word, true))
            {
                var mainPart = doc.MainDocumentPart;
                for (var i = 1; i < as_word_paths.Length; i++)
                {
                   
                    var altChunkId = "cid_" + Guid.NewGuid().ToString().Replace("-", "");
                    var chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId);
                    //mainPart.Document.Save();
                    using (FileStream fileStream = File.Open(as_word_paths[i], FileMode.Open))
                    {
                        chunk.FeedData(fileStream);
                    }
                    var altChunk = new DocumentFormat.OpenXml.Wordprocessing.AltChunk();
                    altChunk.Id = altChunkId;
                    //添加下一页(下一个文档合并此页)
                    if (breakNewPage)
                    {
                        Paragraph newPage = new Paragraph(new Run
                         (new Break() { Type = BreakValues.Page }
                         ));
                        mainPart.Document.Append(newPage, altChunk);
                    }
                    else
                    {
                        mainPart.Document.Append(altChunk);
                    }
                    //mainPart.Document.Body.Append(altChunk);
                }
                //mainPart.Document.Body.InsertAfter(altChunk, mainPart.Document.Body.Elements<DocumentFormat.OpenXml.Wordprocessing.Paragraph>().Last());
                mainPart.Document.Save();
               
            }
        }

详情了解...

相关推荐
WJ.Polar6 小时前
Java封装、继承、多态
java·开发语言
摇滚侠6 小时前
Java 中如何表示负数,有符号和无符号的区别,补码的计算规则,char byte short int long 的范围
java·开发语言
weixin_307779136 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
爱读书的小胖6 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
鸽鸽程序猿7 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
Lhappy嘻嘻7 小时前
读懂 JVM:内存模型、类加载机制、分代回收
java·开发语言·jvm
cpp_w8 小时前
C#基础3- 面向对象中级应用3
后端·c#
weixin_307779138 小时前
C++代码实现MATLAB中的spectralcluster函数功能
开发语言·c++·算法·matlab
鸽鸽程序猿8 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言
Wang's Blog8 小时前
Java 项目实战: 交友项目 - 个人资料管理的需求分析与接口设计
java·开发语言·交友