Open XML SDK 2.0 for Microsoft Office を使用して Windows で作成された Mac osx 環境で Apache POI 3.8 を使用してファイルを読み取ろうとすると、xlsx ファイルを読み込めないため、ヌル ポインター例外が発生します。以下はスタックトレースです。ファイルを開いて表示できます。
mac os env で作成したファイルに対しても同じコードが機能します。処理する前にファイルを開いて保存しても、問題はありません。注意:保存後はファイルサイズが大きくなります。.net で生成され、mac osx 環境で処理されるファイルに問題がありますか。
エラーを下回っている理由の手がかり。
Caused by: java.lang.NullPointerException
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:253)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:183)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:73)
クラスは以下のようになり、ユーティリティ メソッドを使用して、クラス全体をコピーしませんでした。しかし、これwb = new XSSFWorkbook(bis)
はワークブックの作成中に発生します。WorkbookFactory.create(bis)
の代わりにいくつかのオプションを試しXSSFWorkbook
ましたが、エラーは同じままです。問題は主にファイルの内容にあります。
public class XLSXReader {
private BufferedInputStream bis;
private boolean hasNext = true;
int skipLines;
private boolean linesSkiped;
// The default line to start reading.
public static final int DEFAULT_SKIP_LINES = 0;
private XSSFWorkbook wb =null;
private XSSFSheet sheet=null;
private int noOfCols;
public XLSXReader(InputStream is){
bis = new BufferedInputStream(is);
this.noOfCols=0;
try {
wb = new XSSFWorkbook(bis);
sheet = wb.getSheetAt(0);
} catch (Exception e) {
e.printStackTrace();
}
}
// with basic utility methods ....
}