3

poi(最新バージョン) apache ライブラリの "IllegalArguementException : パラメーター 'id' の値が範囲外でした" を取得しています。

java.lang.IllegalArgumentException: Value for parameter 'id' was out of bounds
at org.apache.poi.util.IdentifierManager.reserve(IdentifierManager.java:80)
at org.apache.poi.xwpf.usermodel.XWPFRun.<init>(XWPFRun.java:110)
at org.apache.poi.xwpf.usermodel.XWPFParagraph.buildRunsInOrderFromXml(XWPFParagraph.java:126)
at org.apache.poi.xwpf.usermodel.XWPFParagraph.<init>(XWPFParagraph.java:79)
at org.apache.poi.xwpf.usermodel.XWPFDocument.onDocumentRead(XWPFDocument.java:146)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159)
at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:116)

この例外の原因となっているステートメントは XWPFDocument doc=new XWPFDocument(OPCPackage.open(fis1)); where fis1is a simple FileInputStreamObject です。

4

1 に答える 1

4

これは明らかに (少なくとも) LibreOffice の docx ファイルで発生します。

そのドキュメントを Microsoft Office で再保存するという回避策とは別に、コードの修正が可能です。

問題は、org.apache.poi.xwpf.usermodel.XWPFDocument で 1 から始まる ID に対して org.apache.poi.util.IdentifierManager が初期化されることです。ただし、docx ファイルには 0 から始まる (有効な) ID を含めることができます。

このコンストラクター呼び出しを 1 ではなく 0 から開始するように編集し、POI JAR のローカル バージョンを構築すると、POI は上記のエラー メッセージの原因となっていたドキュメントで正しく機能します。

于 2013-09-17T15:43:22.280 に答える