В настоящее время у меня есть этот код для открытия файла xlsx с использованием apache POI
File existingXlsx = new File("/app/app.xlsx");
System.out.println("File Exists: " + existingXlsx.exists());
Workbook workbook = WorkbookFactory.create(existingXlsx);
Когда я пытаюсь выполнить это, я получаю следующий вывод
File Exists: true
java.lang.NullPointerException
at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:270)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:186)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:91)
Файл, который я пытаюсь открыть, можно открыть в Excel и правильно показать данные, что я могу сделать, чтобы получить POI для чтения файла XLSX?
Вот файл, который ломается;
https://mega.co.nz/#!FJMWjQKI!CzihQgMVpxOQDTXzSnb3UFYSKbx4yFTb03-LI3iLmkE
Edit
Я также попытался, это приводит к той же ошибке;
Workbook workbook = new XSSFWorkbook(new FileInputStream(existingXlsx));
Edit
Я нашел строку, в которой она выбрала исключение:
WorkbookDocument doc = WorkbookDocument.Factory.parse(getPackagePart().getInputStream());
this.workbook = doc.getWorkbook();
Map<String, XSSFSheet> shIdMap = new HashMap<String, XSSFSheet>();
for(POIXMLDocumentPart p : getRelations())
{
if(p instanceof SharedStringsTable) sharedStringSource = (SharedStringsTable)p;
else if(p instanceof StylesTable) stylesSource = (StylesTable)p;
else if(p instanceof ThemesTable) theme = (ThemesTable)p;
else if(p instanceof CalculationChain) calcChain = (CalculationChain)p;
else if(p instanceof MapInfo) mapInfo = (MapInfo)p;
else if (p instanceof XSSFSheet) {
shIdMap.put(p.getPackageRelationship().getId(), (XSSFSheet)p);
}
}
stylesSource.setTheme(theme); <== BREAKS HERE
Edit
После некоторого исследования POI, похоже, не может найти styles.xml и workbook.xml, я нахожу это странным, потому что простой читатель, такой как TextWrangler, который показывает структуру архива, показывает мне стили xml.
Как это исправить? Есть ли стиль styles.xml по умолчанию и workbook.xml, который можно вставить в архив?