どちらかと言えば、Excel派なんですが、、今回はWordファイルを開いてみます。
Apache POIの入手
入手方法はこちらの記事をどうぞ。
Excelの例で書いてますが、同じもので大丈夫です。
Apache POIを使って、Wordファイルを読み込むサンプル
Wordファイルを読み込んで、標準出力します。
Wordファイルの中身は、とりあえずLorem ipsumってことで。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import java.io.FileInputStream; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class WordFileReadTest { public static void main(String[] args) { //Wordファイルを読み込んで、ドキュメントを作成 try(FileInputStream fis = new FileInputStream("c:\\work\\test.docx"); XWPFDocument document = new XWPFDocument(fis)) { //段落を取得 for (XWPFParagraph p : document.getParagraphs()) { //段落からプロパティセットを取得 for (XWPFRun run : p.getRuns()) { //プロパティセットから文書を取得(←フォントが一緒なところなどの集まり) System.out.println(run.getText(0)); } } } catch (Exception e) { e.printStackTrace(); } } } |
実行結果
こんな感じでLorem ipsumが出力されます。
ついでに、log4j-coreの設定に関するエラーが表示されます。
1 2 3 4 5 | ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console... Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. |
エラーが気になるようでしたら、log4jを設定しましょう。
サンプルの解説
XWPFDocumentにWordのドキュメントファイルのストリームを渡すことで、Wordファイルを開くことができます。
あとはドキュメントからXWPFDocument#getParagraphs()で段落を取得。段落からXWPFParagraph#getRuns()でプロパティセットを取得。
その中からXWPFRun#getText(int)でテキストを取得できます。
ポイントは、プロパティセットなのですが、これはフォントが違ったりすると分かれてしまいます。
また、Lorem文だとそんな単語無いけど・・なエラーがWordで出ます。これもプロパティセットが分かれる要因になりますので、今回はすべてWord上で無視を設定した後に出力してます。