C# 如何合并、拆分Word文档 博客分类: .NET Word C#.NETSpire.DocWord合并、拆分
程序员文章站
2024-03-25 17:51:10
...
概述
出于方便文档管理、存储、传输等目的,我们常会想要将某些文档拆分为多个子文档,或者将多个文档合并为一个文档。在本文中,将介绍对Word文档进行拆分、合并的方法。下面的示例中将包含以下要点:
1. 合并Word文档
1.1 新建一页合并到文档
1.2紧接上文合并到文档
2. 拆分Word文档
2.1 按分节符拆分
2.2 按分页符拆分
所用工具:
- Free Spire.Doc for .NET
- Visual Studio
示例操作:
一、合并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); } } }
拆分效果:
如需转载,请注明出处!