文檔首頁>>Spire.Doc系列教程>>Spire.Doc系列教程(13):根據(jù)分節(jié)符和分頁符拆分 Word 文檔
Spire.Doc系列教程(13):根據(jù)分節(jié)符和分頁符拆分 Word 文檔
在Word文檔中,我們可以通過最簡單的方法來拆分Word文檔,那就是打開一個(gè)是需要拆分的文檔的副本,刪除我們不需要的內(nèi)容然后將剩余內(nèi)容保存為新文檔到本地。雖然操作簡單,但是一節(jié)一節(jié)的刪除是個(gè)相當(dāng)繁瑣且枯燥的過程。利用Spire.Doc,我們可以程序化的根據(jù)分節(jié)符和分頁符來拆分Word文檔,這避免了手動(dòng)冗雜的操作。本文將對此做詳細(xì)介紹。
根據(jù)分節(jié)符拆分文檔
//實(shí)例化Document對象 Document document = new Document(); //載入待拆分的Word文檔 document.LoadFromFile(@"測試文檔.docx"); Document newWord; for (int i = 0; i < document.Sections.Count; i++) { //每有一個(gè)section就創(chuàng)建一個(gè)新的文檔 newWord = new Document(); //復(fù)制section內(nèi)容到新文檔 newWord.Sections.Add(document.Sections[i].Clone()); //保存文檔 newWord.SaveToFile(String.Format(@"拆分結(jié)果\分節(jié)符拆分的結(jié)果文檔_{0}.docx", i)); }
原文檔如圖,其中有兩個(gè)分節(jié)符:
運(yùn)行程序得到如下結(jié)果:
根據(jù)分頁符拆分文檔
//實(shí)例化Document對象 Document original = new Document(); //載入待拆分的Word文檔 original.LoadFromFile(@"C:\Users\Administrator\Desktop\template.docx"); //實(shí)例化一個(gè)新的文檔并添加新章節(jié) Document newWord = new Document(); Section section = newWord.AddSection(); int index = 0; //根據(jù)章節(jié),段落的層次由大到小依次遍歷文檔元素,復(fù)制內(nèi)容到新的文檔 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(@"C:\Users\Administrator\Desktop\拆分結(jié)果\分頁符拆分的結(jié)果文檔_{0}.docx", index), FileFormat.Docx); index++; //一個(gè)文檔完成之后新建一個(gè)文檔 newWord = new Document(); section = newWord.AddSection(); //復(fù)制上一個(gè)分頁符所在的段落的所有內(nèi)容到新文檔 section.Body.ChildObjects.Add(para.Clone()); //如果新文檔第一段(也就是剛剛復(fù)制的那一段)沒有子元素, //則把文檔的第一個(gè)子元素刪除 if (section.Paragraphs[0].ChildObjects.Count == 0) { section.Body.ChildObjects.RemoveAt(0); } else { //如果有內(nèi)容則刪除分頁符之前的所有內(nèi)容 while (i >= 0) { section.Paragraphs[0].ChildObjects.RemoveAt(i); i--; } } } } } if (obj is Table) { section.Body.ChildObjects.Add(obj.Clone()); } } } newWord.SaveToFile(String.Format(@"C:\Users\Administrator\Desktop\拆分結(jié)果\分頁符拆分的結(jié)果文檔_{0}.docx", index), FileFormat.Docx);