JavaでWordを読み書きする。
以前、Javaでエクセルを編集するコードを書いたが、今回はWordを読み書きしてみる。
JavaでWordを取り扱うには、エクセルの時と同様に“Apache POI”をインストールする必要がある。(ダウンロードは
Apache POI - the Java API for Microsoft Documentsからできる)
まずは、既存のWordファイルを開き、文章を取得し、新しいWordファイルにコピーするコードを書いた。
import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class WordInOut { public static void main (String[] args) throws Exception { XWPFDocument doc = new XWPFDocument ( new FileInputStream("C:\\Users\\aki-miya\\Desktop\\Test file.docx")); XWPFWordExtractor ex = new XWPFWordExtractor(doc); XWPFDocument exDoc = new XWPFDocument (); XWPFParagraph para = exDoc.createParagraph(); XWPFRun run = para.createRun(); String tx = ex.getText(); run.setText(tx); System.out.println(tx); exDoc.write(new FileOutputStream("C:\\Users\\aki-miya\\Desktop\\Test file-copy.docx")); } }
ただし、このコードでは下記のような文章のWordファイルを読み込むと
Test file Hellow world おはよう
次のように、改行が反映されない形で新しいWordファイルにコピーされてしまった。
Test file Hellow world おはよう
そこで、次に“改行が反映された形で新しいWordファイルにコピーする”方法を下記に書く。
import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class WordSplit { static StringBuilder sb; public static void main (String[] args) throws Exception { XWPFDocument doc = new XWPFDocument ( new FileInputStream("C:\\Users\\aki-miya\\Desktop\\Test file.docx")); XWPFWordExtractor ex = new XWPFWordExtractor(doc); XWPFDocument exDoc = new XWPFDocument (); XWPFParagraph para = exDoc.createParagraph(); XWPFRun run = para.createRun(); String tx = ex.getText(); String [] txs = tx.split("\n"); StringBuilder sb = new StringBuilder(); for ( int i = 0; i < txs.length; i++) { sb = new StringBuilder(); sb.append((i + 1) + " : " + txs[i]); run.setText(new String(sb)); run.addCarriageReturn(); } exDoc.write(new FileOutputStream("C:\\Users\\aki-miya\\Desktop\\Test file-copy2.docx")); } }
このコードでは、上述の下記の文章が
Test file Hellow world おはよう
下記のように、改行されるたびに("\n"があるたびに)、番号が振られ改行できるようになった。
1 : Test file 2 : Hellow world 3 : おはよう
今回は、
for ( int i = 0; i < txs.length; i++) { sb = new StringBuilder();
の部分で、各行ごとに新たな"StringBuilder();"を作ることで改行できるようにしたが、もっとキレイな方法がありそう。