MS Word では、元のドキュメントから内容を手動で切り取り、新しいドキュメントに貼り付けることで、ドキュメントを分割することができます。この作業は簡単ですが、特に長いドキュメントを扱う場合、非常に面倒で時間がかかることもあります。この記事では、Spire.Doc for .NET を使用して、プログラムによって Word ドキュメントを複数のファイルに分割する方法について説明します。 Word ドキュメントを改ページで分割する Word ドキュメントをセクション区切りで分割する Spire.Doc for .NET をインストールします まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。 PM> Install-Package Spire.Doc Word ドキュメントを改ページで分割する Word ドキュメントには、改ページによって区切られた複数のページを含めることができます。Word ドキュメントを改ページで分割するには、以下の手順とコードを参照してください。 Document のインスタンスを作成します。 Document.LoadFromFile() メソッドを使用して Word ドキュメントを読み込みます。 新しい Word ドキュメントを作成し、そこにセクションを追加します。 元のドキュメントの各セクションにあるすべてのボディの子オブジェクトをループし、子オブジェクトが段落か表かを判断します。 セクションの子オブジェクトが表の場合は、Section.Body.ChildObjects.Add() メソッドを使用して、新規文書のセクションに直接追加します。 セクションの子オブジェクトが段落の場合、まず段落オブジェクトを新規文書のセクションに追加します。次に、段落の子オブジェクトをすべてループし、その子オブジェクトが改ページかどうかを判断します。 段落の子オブジェクトが改ページであれば、そのインデックスを取得し、インデックスでその段落から改ページを削除します。 ドキュメントを保存し、上記の処理を繰り返します。 C# VB.NET using System; using Spire.Doc; using Spire.Doc.Documents; namespace SplitByPageBreak { class Program { static void Main(string[] args) { //Documentのインスタンスを作成する Document original = new Document(); //Wordドキュメントを読み込む original.LoadFromFile("C:/サンプル.docx"); //新しいWordドキュメントを作成し、それにセクションを追加する Document newWord = new Document(); Section section = newWord.AddSection(); int index = 0; //元のドキュメントに含まれるすべてのセクションをループする foreach (Section sec in original.Sections) { //各セクションのボディーの子オブジェクトをすべてループする。 foreach (DocumentObject obj in sec.Body.ChildObjects) { if (obj is Paragraph) { Paragraph para = obj as Paragraph; sec.CloneSectionPropertiesTo(section); //元のドキュメントのセクションにある段落オブジェクトを、新しいドキュメントのセクションに追加する 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); //新しいWordドキュメントを保存する newWord.SaveToFile(String.Format("result/分割-{0}.docx", index), FileFormat.Docx); index++; //新しいドキュメントを作成し、それにセクションを追加する 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("result/分割-{0}.docx", index), FileFormat.Docx); } } } Imports System Imports Spire.Doc Imports Spire.Doc.Documents Namespace SplitByPageBreak Class Program Shared Sub Main(ByVal args() As String) 'Documentのインスタンスを作成する Dim original As Document = New Document() 'Wordドキュメントを読み込む original.LoadFromFile("C:/サンプル.docx") '新しいWordドキュメントを作成し、それにセクションを追加する Dim NewWord As Document = New Document() Dim section As Section = NewWord.AddSection() Dim index As Integer = 0 '元のドキュメントに含まれるすべてのセクションをループする Dim sec As Section For Each sec In original.Sections '各セクションのボディーの子オブジェクトをすべてループする。 Dim obj As DocumentObject For Each obj In sec.Body.ChildObjects If TypeOf obj Is Paragraph Then Dim para As Paragraph = obj As Paragraph sec.CloneSectionPropertiesTo(section) '元のドキュメントのセクションにある段落オブジェクトを、新しいドキュメントのセクションに追加する section.Body.ChildObjects.Add(para.Clone()) '各段落のすべての子オブジェクトをループし、オブジェクトが改ページであるかどうかを判断する Dim parobj As DocumentObject For Each parobj In para.ChildObjects If TypeOf parobj Is Break && (parobj as Break).BreakType = BreakType.PageBreak Then '段落内の改ページのインデックスを取得する Dim i As Integer = para.ChildObjects.IndexOf(parobj) 'その段落から改ページを削除する section.Body.LastParagraph.ChildObjects.RemoveAt(i) '新しいWordドキュメントを保存する NewWord.SaveToFile(String.Format("result/分割-{0}.docx", index), FileFormat.Docx) index = index + 1 '新しいドキュメントを作成し、それにセクションを追加する NewWord = New Document() section = NewWord.AddSection() '元のセクションの段落オブジェクトを、新しいドキュメントのセクションに追加する section.Body.ChildObjects.Add(para.Clone()) If section.Paragraphs(0).ChildObjects.Count = 0 Then '最初の空白の段落を削除する section.Body.ChildObjects.RemoveAt(0) Else '改ページ前の子オブジェクトを削除する While i >= 0 section.Paragraphs(0).ChildObjects.RemoveAt(i) i = i - 1 End While End If End If Next End If If TypeOf obj Is Table Then '元セクションの表のオブジェクトを、新しいドキュメントのセクションに追加する section.Body.ChildObjects.Add(obj.Clone()) End If Next Next 'ドキュメントを保存する NewWord.SaveToFile(String.Format("result/分割-{0}.docx", index), FileFormat.Docx) End Sub End Class End Namespace Word ドキュメントをセクション区切りで分割する Word ドキュメントでは、セクションは、それ自身のページ書式を含むドキュメントの一部分です。複数のセクションを含むドキュメントの場合、Spire.Doc for .NET はセクションの区切りによるドキュメントの分割もサポートしています。詳しい手順は以下の通りです。 Document のインスタンスを作成します。 Document.LoadFromFile() メソッドを使用して Word ドキュメントを読み込みます。 新しい Document のオブジェクトを作成します。 元の Word ドキュメントのすべてのセクションをループします。 Document.Sections.Clone() メソッドを使用して、元のドキュメントの各セクションをコピーします。 Document.Sections.Add() メソッドを使用して、コピーしたセクションを新しいセクションとして新しいドキュメントに追加します。 Document.SaveToFile() メソッドを使用して、ドキュメントを保存します。 C# VB.NET using System; using Spire.Doc; namespace SplitBySectionBreak { class Program { static void Main(string[] args) { //Documentのインスタンスを作成する Document document = new Document(); //Wordドキュメントを読み込む document.LoadFromFile("C:/サンプル.docx"); //新しいDocumentのオブジェクトを作成する Document newWord; //元のドキュメント内のすべてのセクションをループする for (int i = 0; i < document.Sections.Count; i++) { newWord = new Document(); //元ドキュメントの各セクションをコピーして、新しいセクションとして新ドキュメントに追加する newWord.Sections.Add(document.Sections[i].Clone()); //ドキュメントを保存する newWord.SaveToFile(String.Format(@"test出力_{0}.docx", i)); } } } } Imports System Imports Spire.Doc Namespace SplitBySectionBreak Class Program Shared Sub Main(ByVal args() As String) 'Documentのインスタンスを作成する Dim document As Document = New Document() 'Wordドキュメントを読み込む document.LoadFromFile("C:/サンプル.docx") '新しいDocumentのオブジェクトを作成する Dim NewWord As Document '元のドキュメント内のすべてのセクションをループする Dim i As Integer For i = 0 To document.Sections.Count - 1 Step i + 1 NewWord = New Document() '元ドキュメントの各セクションをコピーして、新しいセクションとして新ドキュメントに追加する NewWord.Sections.Add(document.Sections(i).Clone()) 'ドキュメントを保存する NewWord.SaveToFile(String.Format("test出力_{0}.docx", i)) Next End Sub End Class End Namespace 一時ライセンスを申請する 結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。 にお問い合わせ、30 日間有効な一時ライセンスを取得してください。