One IT Thing

IT業界で飯を食う為の学習系雑記

プチハマリ解決日記

org.apache.poi.ooxml.POIXMLException: Strict OOXML isn’t currently supported, please see bug #57699

投稿日:2019年7月2日 更新日:

事象

以下のExcelファイルをApache POIで読み込んだ際に発生。

pom.xml。POIは2019/04リリースの最新4.1.0。

        (snip)

	<properties>
		<java.version>11</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>4.1.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>4.1.0</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

こんな感じでxlsx読み込み。

package com.example;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class Hoge {
    public static void main(String[] args) throws EncryptedDocumentException, IOException {
        Workbook workbook = WorkbookFactory.create(new File("mji.00601.xlsx"));

        Sheet sheet = workbook.getSheetAt(0);
        Iterator<Row> rows = sheet.rowIterator();
        while (rows.hasNext()) {
            Row row = rows.next();
            Cell cell = row.getCell(7);
            if (cell != null) {
                String kosekiNumber = cell.getStringCellValue();
                System.out.println("kosekinum = " + kosekiNumber);
        }
    }
}

Excelを読み込むと実行時例外発生。

Exception in thread "main" org.apache.poi.ooxml.POIXMLException: Strict OOXML isn't currently supported, please see bug #57699
	at org.apache.poi.ooxml.POIXMLDocumentPart.getPartFromOPCPackage(POIXMLDocumentPart.java:750)
	at org.apache.poi.ooxml.POIXMLDocumentPart.<init>(POIXMLDocumentPart.java:148)
	at org.apache.poi.ooxml.POIXMLDocumentPart.<init>(POIXMLDocumentPart.java:138)
	at org.apache.poi.ooxml.POIXMLDocument.<init>(POIXMLDocument.java:61)
	at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:276)
	at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:88)
	at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:116)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.apache.poi.ss.usermodel.WorkbookFactory.createWorkbook(WorkbookFactory.java:339)
	at org.apache.poi.ss.usermodel.WorkbookFactory.createXSSFWorkbook(WorkbookFactory.java:314)
	
        (snip)

原因

MS Office2013から実装されたOffice Open XMLのstrict仕様をPOIが実装していないらしいです。例外に出てくるバグ#57699を見てみると先月2019/5月にやり取りしている人達が居ました。


2019-05-20 14:26:49 UTC


Over two years have passed – has there been any work done on this / any milestone?

(最後のメッセージから)2年が経ちました。この件に関してなにかしらのマイルストーンのもと開発はされていますか?

2019-05-20 14:56:34 UTC


No, it seems none of the contributors needs it urgently enough to warrant spending time on it. As this is a purely community supported project without commercial backing, your best bet to get progress on this will be to provide patches/time yourself if you can contribute in any way.

いいえ。これに対して喫緊に時間を費やせる貢献者は居ないようです。純粋に資金的サポートの無いプロジェクトなので、もしあなたが貢献できるとしたらあなた自身がパッチを提供することがこの件の進捗を得るベストな方法です。

oh…Apache POIの開発ってかなり切羽詰まってたんですね。。。この件まで手が回っていないようです。だから例外時にバグ番号まで出してるんでしょうか。

対処

MS Office2013以上で保存されたことにより、POIが対応していないStrict OOXML形式で保存されていることが問題っぽいです。

MS Office 2010でもLibreOfficeでも良いので、一回開いて保存し直すことでApache POIで読み込むことが出来ました。

まとめ

ただただOSSのお世話になってる身としては何も文句は言えないです。

今現在OSS提供してる側の人達はほぼほぼ無償で世界中に貢献している訳ですし、もっと報われて欲しいところです。github sponsorshipが正式に始まれば改善されたりするのかな・・・。

開発者の自己犠牲という薄氷の上でOSSが成り立ってるのを感じることが出来るバグかも。

-プチハマリ解決日記
-

執筆者:

関連記事

Angularのテンプレート評価式にビット演算を使うとTemplate parse errorが発生する

AngularのテンプレートHTMLでビット演算をすることは禁じられているので代替手段を考えます。 目次1 事象2 原因3 対処 事象 CSSクラスをビット演算で切り替えるテンプレートを書きました。c …

git push時に「error: RPC failed; result=22, HTTP code = 501」エラー

目次1 事象2 原因3 対処4 まとめ 事象 オンプレGitLabへのgit push時に掲題のエラーが発生してpushに失敗します。 原因 git push時の1ファイル最大サイズは1Mbyteの為 …

EclipseのXMLエディタ一行目でDTDエラー「参照ファイルにエラーが含まれています」

目次1 事象2 原因3 対処4 まとめ 事象 checkstyleのルールXMLをEclipseで開くと一行目にエラーマーク。 カーソルを合わせた時のメッセージ。 XMLのデータ構造整合性をチェックす …

Angular4.4のHTTP通信処理にタイムアウトを設定をすると「timeout is not a function」エラーが発生する

目次1 事象2 原因3 対処4 まとめ 事象 Angular4.3で追加されたHttpClientModuleに移行せず、HttpModuleを使い続けているアプリで、とある理由からpackage-l …

adb devicesコマンドでAndroid端末を認識しない

目次1 事象2 原因3 解決 事象 USB接続するAndroidによって以下のエラーが出たりします。 C:\src\ionic\awsomeapp>adb devices List of dev …

 

shingo.7k24
 

東京在勤、職歴20年越え中年ITエンジニアです。まだ開発現場で頑張っています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。

私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。