チーム作業が必要なかなり長い Word ドキュメントがある場合、作業を効率化するためにドキュメントをいくつかの短いファイルに分割し、それぞれの担当者に割り当てる必要があるかもしれません。この記事では、手作業でカット&ペーストする代わりに、Spire.Doc for Java を使ってプログラムで Word ドキュメントを分割する方法を紹介します。
Spire.Doc for Java をインストールします
まず、Spire. Doc for Java を Java プロジェクトに追加する必要があります。JAR ファイルは、このリンクからダウンロードできます。Maven を使用する場合は、次のコードをプロジェクトの pom.xml ファイルに追加する必要があります。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url> https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc</artifactId>
<version>11.6.0</version>
</dependency>
</dependencies>
Word ドキュメントを改ページで分割する
Word ドキュメントには、改ページで区切られた複数のページを含めることができます。Word ドキュメントを改ページで分割するには、以下の手順とコードを参照してください。
- Document のインスタンスを作成します。
- Document.loadFromFile() メソッドを使用して Word ドキュメントを読み込みます。
- 新しい Word ドキュメントを作成し、そこにセクションを追加します。
- 元のドキュメントの各セクションにあるすべてのボディの子オブジェクトを走査し、子オブジェクトが段落か表かを判断します。
- セクションの子オブジェクトが表の場合は、Section.getBody().getChildObjects().add() メソッドを使用して、新規ドキュメントのセクションに直接追加します。
- セクションの子オブジェクトが段落の場合は、まずその段落オブジェクトを新規ドキュメントのセクションに追加します。次に、段落のすべての子オブジェクトを走査し、子オブジェクトが改ページかどうかを判定します。
- 子オブジェクトが改ページであれば、そのインデックスを取得し、インデックスでその段落から改ページを削除します。
- 新しい Word ドキュメントを保存し、上記の処理を繰り返します。
- Java
import com.spire.doc.*;
import com.spire.doc.documents.BreakType;
import com.spire.doc.documents.Paragraph;
public class splitByPageBreak {
public static void main(String[] args) {
//Documentのインスタンスを作成する
Document original = new Document();
//Wordドキュメントを読み込む
original.loadFromFile("サンプル.docx");
//新しいWordドキュメントを作成し、そこにセクションを追加する
Document newWord = new Document();
Section section = newWord.addSection();
int index = 0;
//原文のすべてのセクションをループする
for (int s = 0; s < original.getSections().getCount(); s++) {
Section sec = original.getSections().get(s);
//各セクションに含まれるボディーの子オブジェクトをすべてループする
for (int c = 0; c < sec.getBody().getChildObjects().getCount(); c++) {
DocumentObject obj = sec.getBody().getChildObjects().get(c);
if (obj instanceof Paragraph) {
Paragraph para = (Paragraph) obj;
sec.cloneSectionPropertiesTo(section);
//元のセクションの段落オブジェクトを新しいドキュメントのセクションに追加する
section.getBody().getChildObjects().add(para.deepClone());
for (int i = 0; i < para.getChildObjects().getCount(); i++) {
DocumentObject parobj = para.getChildObjects().get(i);
if (parobj instanceof Break) {
Break break1 = (Break) parobj;
if (break1.getBreakType().equals(BreakType.Page_Break)) {
//段落内の改ページのインデックスを取得する
int indexId = para.getChildObjects().indexOf(parobj);
//段落から改ページを削除する
Paragraph newPara = (Paragraph) section.getBody().getLastParagraph();
newPara.getChildObjects().removeAt(indexId);
//新しいWordドキュメントを保存する
newWord.saveToFile("Output/ドキュメント/ドキュメント"+index+".docx", FileFormat.Docx);
index++;
//新しいWordドキュメントを作成し、そこにセクションを追加する
newWord = new Document();
section = newWord.addSection();
//元のセクションの段落オブジェクトを新しいドキュメントのセクションに追加する
section.getBody().getChildObjects().add(para.deepClone());
if (section.getParagraphs().get(0).getChildObjects().getCount() == 0) {
//最初の空白段落を削除する
section.getBody().getChildObjects().removeAt(0);
} else {
//改ページの前に子オブジェクトを削除する
while (indexId >= 0) {
section.getParagraphs().get(0).getChildObjects().removeAt(indexId);
indexId--;
}
}
}
}
}
}
if (obj instanceof Table) {
//元のセクションの表のオブジェクトを新しいドキュメントのセクションに追加する
section.getBody().getChildObjects().add(obj.deepClone());
}
}
}
//ドキュメントを保存する
newWord.saveToFile("Output/ドキュメント/ドキュメント"+index+".docx", FileFormat.Docx);
}
}
Word ドキュメントをセクション区切りで分割する
Word ドキュメントでは、セクションは独自のページ書式を含むドキュメントの一部です。複数のセクションを含むドキュメントについては、Spire.Doc for Java はセクション区切りによるドキュメントの分割もサポートしています。詳しい手順は以下の通りです。
- Document のインスタンスを作成します。
- Document.LoadFromFile() メソッドを使用して Word ドキュメントを読み込みます。
- 新しい Word ドキュメントのオブジェクトを定義します。
- 元の Word ドキュメントのすべてのセクションを走査します。
- Section.deepClone() メソッドを使用して、元のドキュメントの各セクションをクローンします。
- Document.getSections().add() メソッドを使用して、コピーしたセクションを新しいセクションとして新しいドキュメントに追加します。
- Document.saveToFile() メソッドを使用して、結果のドキュメントを保存します。
- Java
import com.spire.doc.Document;
import com.spire.doc.Section;
public class splitBySectionBreak {
public static void main(String[] args) {
//Documentのインスタンスを作成する
Document document = new Document();
//Word ドキュメントを読み込む
document.loadFromFile("サンプル.docx");
//新しいWordドキュメントのオブジェクトを定義する
Document newWord;
//元のWordドキュメントのすべてのセクションをループする
for (int i = 0; i < document.getSections().getCount(); i++) {
newWord = new Document();
//元の文書の各セクションをコピーし、新しいセクションとして新しい文書に追加する
newWord.getSections().add(document.getSections().get(i).deepClone());
//結果ドキュメントを保存する
newWord.saveToFile("ドキュメント1/ドキュメント" + i + ".docx");
}
}
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。