出于方便文档管理、存储、传输等目的,我们常会想要将某些文档拆分为多个子文档,或者将多个文档合并为一个文档。在本文中,将介绍对Word文档进行拆分、合并的方法。下面的示例中将包含以下要点:
一、合并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);
}
}
}
拆分效果:
阅读结束。
如需转载,请注明出处!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。