C# 如何合並、拆分Word文檔
阿新 • • 發佈:2018-05-11
C# .NET Word合並、拆分 免費控件 概述
出於方便文檔管理、存儲、傳輸等目的,我們常會想要將某些文檔拆分為多個子文檔,或者將多個文檔合並為一個文檔。在本文中,將介紹對Word文檔進行拆分、合並的方法。下面的示例中將包含以下要點:
- 合並Word文檔
1.1 新建一頁合並到文檔
1.2 緊接上文合並到文檔 - 拆分Word文檔
2.1 按分節符拆分
2.2 按分頁符拆分
所用工具
- Free Spire.Doc for .NET 6.3
- 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);
}
}
}
拆分效果:
閱讀結束。
如需轉載,請註明出處!
C# 如何合並、拆分Word文檔