質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.91%

Apache POIを使用してjavaでWordを読み取る

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 3,123

hirdd

score 50

Apache POIでWord(ole2フォーマットのものが対象)の情報を読み取りたいと考えております。
そこで、試しに以下のようなソースを書いて実行しようとしたのですが、java.lang.ArrayIndexOutOfBoundsExceptionが出て、HWPFDocumentオブジェクトが初期化できません。。。
どなたか、詳しい方、回避方法をご教授いただけないでしょうか?
■ソース

  1 import org.apache.poi.hwpf.HWPFDocument;
  2 import org.apache.poi.hwpf.usermodel.Range;
  3 import java.io.File;
  4 import java.io.FileInputStream;
  5 import java.util.List;
  6 import java.io.IOException;
  7 import java.io.FileNotFoundException;
  8 
  9 public class WordReader {
 10 
 11         public static void main(String[] args) {
 12 
 13                 // 読み取り対象のファイル名
 14                 String resource = args[0];
 15 
 16                 System.out.println("次のファイルを読み取ります。"+resource);
 17                 try {   
 18                         // HWPFDocumentオブジェクトを初期化 
 19                         File resourceFile = new File(resource); 
 20                         HWPFDocument doc = new HWPFDocument(new FileInputStream(resource));
 21                         
 22                         // Rangeを取得。
 23                         Range r = doc.getRange();
 24                         
 25                         // ひとまず、セクションの数を出してみる。
 26                         System.out.println(r.numSections());
 27                 
 28                 }catch(FileNotFoundException e){
 29                         
 30                         System.out.println("FileNotFoundExceptionがでたよ!");
 31                         System.out.println(e);
 32                 }catch(IOException e){
 33                         
 34                         System.out.println("IOExceptionが出たよ");
 35                         System.out.println(e);
 36                 }
 37          
 38         }
 39 }


■実行結果
XXXX$ java -cp ./lib/poi-3.15.jar:./lib/poi-scratchpad-3.15.jar:./ WordReader ./resource/test.doc
次のファイルを読み取ります。./resource/test.doc
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 55207
at org.apache.poi.util.LittleEndian.getShort(LittleEndian.java:225)
at org.apache.poi.hwpf.model.Xst.<init>(Xst.java:64)
at org.apache.poi.hwpf.model.ListLevel.read(ListLevel.java:227)
at org.apache.poi.hwpf.model.ListLevel.<init>(ListLevel.java:71)
at org.apache.poi.hwpf.model.ListFormatOverrideLevel.<init>(ListFormatOverrideLevel.java:41)
at org.apache.poi.hwpf.model.LFOData.<init>(LFOData.java:57)
at org.apache.poi.hwpf.model.PlfLfo.<init>(PlfLfo.java:100)
at org.apache.poi.hwpf.model.ListTables.<init>(ListTables.java:80)
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:296)
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:157)
at org.apache.poi.hwpf.HWPFDocument.<init>(HWPFDocument.java:145)
at WordReader.main(WordReader.java:20)
XXXX$ 

■使用ライブラリ
poi-3.15.jar
poi-scratchpad-3.15.jar

■フォルダ構成
.
├── WordReader.class
├── WordReader.java
├── lib
│   ├── poi-3.15.jar
│   ├── poi-scratchpad-3.15.jar
└── resource
└── test.doc

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

java8で実行されていますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る