Free Spire.Doc for .NET(社区版)
(一)以新建一页合并到文档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); } }}
(一)按分节符拆分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); } }}
使用该组件需要先进行安装,完成后在项目程序中添加引用Spire.Doc.dll,并添加到命名空间。