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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

5930閲覧

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

hirdd

総合スコア50

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/02/28 12:05

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

java

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

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

投稿2017/03/02 02:05

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問