Apache POI로 Word 파일 로드

6103 단어 Word자바POI

이전



Apache POI를 사용하여 Excel 데이터를 읽는 것이 흔한 (?) 것이라고 생각하지만, 요즘 이번에는 슬프게도
Word 데이터를 로드해야 했으므로 여기에 메모를 남깁니다.

Apache POI로 Word 파일 편집 - M12i. 에 의하면, Word 내의 데이터는 Range > Section > Paragraph > CharacterRun 의 계층 구조로 취득할 수 있다고 한다.

그러므로, 우선 어떤 구조로 되어 있는지 전체를 표시해 본다.

소스 코드



build.gradle
...
repositories {
  mavenCentral()
}

dependencies {
  compile 'org.apache.poi:poi-scratchpad:3.11'
}

이것은 2003 형식의 Word 파일을 읽고 있습니다.

Main.java
package com.example;

import java.util.stream.IntStream;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;

public class Main {

  public static void main(String[] args) throws Exception {
    // クラスパス上に配置したWordファイルを読み込む。
    HWPFDocument document =
        new HWPFDocument(Main.class.getResourceAsStream("/sample.doc"));

    // ドキュメント全体を読み込む。
    Range text = document.getRange();

    IntStream.range(0, text.numSections()).forEach(sNo -> {
      Section section = text.getSection(sNo);

      IntStream.range(0, section.numParagraphs()).forEach(pNo -> {
        Paragraph paragraph = section.getParagraph(pNo);

        IntStream.range(0, paragraph.numCharacterRuns()).forEach(cNo -> {
          CharacterRun characterRun = paragraph.getCharacterRun(cNo);

          System.out.printf("%d:%d:%d:%s", sNo, pNo, cNo, characterRun.text());
          System.out.println();

        });
      });
    });

  }

}

Java 8 잘 다루고 있는 느낌이 별로 없지만, 이것으로 우선 전문 CharacterRun 에 분해한 상태로 표시할 수 있다.



불행히도 수수께끼의 문자가 혼란스러워서 좀처럼 매운 맛이 있다.

좋은 웹페이지 즐겨찾기