C# 如何合并、拆分Word文档

概述

出于方便文档管理、存储、传输等目的,我们常会想要将某些文档拆分为多个子文档,或者将多个文档合并为一个文档。在本文中,将介绍对Word文档进行拆分、合并的方法。下面的示例中将包含以下要点:

  1. 合并Word文档
    1.1 新建一页合并到文档
    1.2 紧接上文合并到文档
  2. 拆分Word文档
    2.1 按分节符拆分
    2.2 按分页符拆分

所用工具


示例操作

一、合并Word文档
(一)以新建一页合并到文档
【C#】

using Spire.Doc;

namespace MergeWord_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建两个文档,加载需要合并的文件
            Document doc1 = new Document(@"C:\Users\Administrator\Desktop\TradeNegotiation.docx");
            Document doc2 = new Document(@"C:\Users\Administrator\Desktop\DisputeSettlement.docx");

            //调用InsertTextFromFile()方法,将文档2合并到文档1
            string fileName = @"C:\Users\Administrator\Desktop\DisputeSettlement.docx";
            doc1.InsertTextFromFile(fileName, FileFormat.Docx2013);

            //保存文件
            doc1.SaveToFile("MergedDocument.docx", FileFormat.Docx2013);
        }
    }
}

调试运行该项目,生成文件,如下图所示:

(二)紧接上文合并到文档
【C#】

using Spire.Doc;
using Spire.Doc.Documents;

namespace MergeWord2_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建两个文档,并加载需要合并的两个文件
            Document doc1 = new Document(@"C:\Users\Administrator\Desktop\TradeNegotiation.docx");
            Document doc2 = new Document(@"C:\Users\Administrator\Desktop\DisputeSettlement.docx");
            //获取文档1的最后一个Section
            Section lastSection = doc1.LastSection;
            //遍历文档2中的所有section,复制所有section到文档1
            foreach (Section section in doc2.Sections)
            {
                foreach (Paragraph paragraph in section.Paragraphs)
                {
                    lastSection.Paragraphs.Add(paragraph.Clone() as Paragraph);
                }
            }
            //将合并的文档另存为一个新文档
            doc1.SaveToFile("Merged.docx", FileFormat.Docx2013);
        }
    }
}

合并效果:

二、拆分Word文档
(一)按分节符拆分
【C#】

using Spire.Doc;
using System;

namespace SplitWord_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个Document类对象,并加载需要拆分的文档
            Document document = new Document();
            document.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.docx");
            //实例化Document对象
            Document newWord;
            //遍历文档所有section,复制文档每个section并分别保存到新建的文档,同时将拆分的文档保存到指定路径
            for (int i = 0; i < document.Sections.Count; i++)
            {
                newWord = new Document();
                newWord.Sections.Add(document.Sections[i].Clone());
                newWord.SaveToFile(String.Format(@"results\out_{0}.docx", i));
            }

        }
    }
}

拆分效果:

(二)按分页符拆分
【C#】

using System;
using Spire.Doc;
using Spire.Doc.Documents;

namespace Split_Word_Document_by_Page_Break
{
    class Program
    {
        static void Main(string[] args)
        {
            //实例化一个Document类,加载文档
            Document original = new Document();
            original.LoadFromFile(@"C:\Users\Administrator\Desktop\test.docx");
            //实例化Document类对象,并添加section
            Document newWord = new Document();
            Section section = newWord.AddSection();
            //根据分页来拆分文档
            int index = 0;
            //遍历文档所有section
            foreach (Section sec in original.Sections)
            {
                //遍历文档所有子对象
                foreach (DocumentObject obj in sec.Body.ChildObjects)
                {
                    if (obj is Paragraph)
                    {
                        Paragraph para = obj as Paragraph;
                        //复制并添加原有段落对象到新文档
                        section.Body.ChildObjects.Add(para.Clone());
                        //遍历所有段落子对象
                        foreach (DocumentObject parobj in para.ChildObjects)
                        {
                            if (parobj is Break && (parobj as Break).BreakType == BreakType.PageBreak)
                            {
                                //获取段落分页并移除,保存新文档到文件夹
                                int i = para.ChildObjects.IndexOf(parobj);
                                section.Body.LastParagraph.ChildObjects.RemoveAt(i);
                                newWord.SaveToFile(String.Format("results/out-{0}.docx", index), FileFormat.Docx);
                                index++;
                                //实例化Document类对象,添加section,将原文档段落的子对象复制到新文档
                                newWord = new Document();
                                section = newWord.AddSection();
                                section.Body.ChildObjects.Add(para.Clone());
                                if (section.Paragraphs[0].ChildObjects.Count == 0)
                                {
                                    //移除第一个空白段落
                                    section.Body.ChildObjects.RemoveAt(0);
                                }
                                else
                                {
                                    //删除分页符前的子对象
                                    while (i >= 0)
                                    {
                                        section.Paragraphs[0].ChildObjects.RemoveAt(i);
                                        i--;
                                    }
                                }
                            }
                        }
                    }
                    //若对象为表格,则添加表格对象到新文档
                    if (obj is Table)
                    {
                        section.Body.ChildObjects.Add(obj.Clone());
                    }
                }
            }
            //拆分后的新文档保存至指定文档
            newWord.SaveToFile(String.Format("results/out-{0}.docx", index), FileFormat.Docx);
        }
    }
}

拆分效果:

阅读结束。
如需转载,请注明出处!

原文地址:http://blog.51cto.com/eiceblue/2115104

时间: 2024-10-13 16:33:22

C# 如何合并、拆分Word文档的相关文章

C# 合并及拆分Word文档

本文简要分析一下如何如何使用C#简单实现合并和拆分word文档.平时我们在处理多个word文档时,可能会想要将两个文档合并为一个,或者是将某个文档的一部分添加到另一个文档中,有的时候也会想要将文档拆分.在Word中,合并或拆分文档最简单的方式就是打开一个原文档的副本文件,复制我们需要的部分,删除不需要的部分,然后再保存文档.使用这种方法在文档比较多或者比较大时手动操作起来比较费时,以下是使用C#实现合并一个Word文档的某一个section到另一个文档或者合并两个完整的Word文档到一个单独的文

多人协作时编辑word文档的一个小窍门

多人协作时编辑word文档的一个小窍门 最近在工作中编写标书时由于不同内容分给了各个部门去制作,但是在汇总后遇到再次修改的问题.对方把修改后的部分文档发给我粘贴到标书中后,所有的格式全部都乱了.重新整理格式.标题,每次导入新的文档都重复这个工作,真是低效啊.事后想想word这么高级的文档编辑工具,肯定会有解决办法吧? 解决办法一 文档合并 将每个章节划分为多个文档,文档名称命名为章节编号,然后: 我们需要新建一个word文档并对这个文档的页面进行设置,使之与要合并的其他文档的页面设置保持一致,或

word文档批量合并工具

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting common errors. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorki

C# 实现将多个word文档合并成一个word文档的功能

前段时间项目上遇到这么一个需求,需要将多个OCR识别的word文档合并成一个,于是就在网上找了找,自己修改了一下.在这里跟大家分享一下,希望有用的到的. 要做多word文档合并,首先要导入Microsoft.Office.Interop.Word这个dll.我觉得很多人会在这个问题上纠结很久,因为找不到这个dll,当然我也这里找了很久才找到,最终我的解决办法是这样的.如果在VS的引用下的COM组件中找不到这个dll,那么,你就在你的电脑上查找这个文件,如果找到了,你可以直接把它复制到你项目中,然

Java 合并、拆分PDF文档

处理PDF文档时,我们可以通过合并的方式,来任意组几个不同的PDF文件或者通过拆分将一个文件分解成多个子文件,这样的好处是对文档的存储.管理很方便.下面将通过Java程序代码介绍具体的PDF合并.拆分的方法.工具:Free Spire.PDF for Java 2.0.0 (免费版)注:2.0.0版本的比之前的1.0.0版本在功能上做了很大提升,支持所有收费版的功能,只是在文档页数上有一定限制,要求不超过10页,但是对于常规的不是很大的文件,这个类库就非常实用. jar文件导入:步骤 1:在Ja

在项目中利用TX Text Control进行WORD文档的编辑显示处理

在很多文档管理的功能模块里面,我们往往需要对WORD稳定进行展示.编辑等处理,而如果使用微软word控件进行处理,需要安装WORD组件,而且接口使用也不见得简单易用,因此如果有第三方且不用安装Office的能够展示WORD及进行编辑,那是比较不错的选择,TX Text Control就是这样的控件,本文就是基于这个控件的使用,实现在文档管理项目中的应用. 1.TX Text Control的介绍及使用 TX Text Control是一款功能类似于 MS Word 的文字处理控件,包括文档创建.

Java读取word文档解决方案

java读取word文档时,虽然网上介绍了很多插件poi.java2Word.jacob.itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用):java2Word.jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄:itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法.经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,

基于C#.NET的动态Word文档生成及数据填充研究

利用C#.NET设计的管理信息系统应用非常广泛,但其报表往往是利用水晶报表或其它工具形成固定式报表,这样不便于修改和电子文档的保存及传递,如果能将输出结果写入到Word文档中这样就解决了这个问题.现从以下几个方面介绍如何利用C#.NET来控制Word文档的操作.1 利用C#.NET生成和设置Word文档我们用VS2008中的C#.NET来实现的,所以要安装好VS2008.在编程之前必须从“项目”菜单上“添加引用”对话框的“COM”选硕卡中添加对类型库的引用,并在程序首部加入“usingWord;

黄聪:利用Aspose.Word控件实现Word文档的操作(转)

撰写人:伍华聪  http://www.iqidi.com  Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般使用Aspose.Cell来实现我想要的各种Excel报表输出.虽然一直也知道Aspose.Word是用来生成Word文档的,而且深信其也是一个很强大的控件,但一直没用用到,所以就不是很熟悉. 偶然一次机会,一个项目的报表功能指定需要导出