我需要快速扫描大量工作簿,这可以通过
完成。 OPCPackage pkg = OPCPackage.open(filename);
XSSFReader r = new XSSFReader(pkg);
SharedStringsTable sst = r.getSharedStringsTable();
Iterator<InputStream> sheets = r.getSheetsData();
但是,在Excel .xlsx文件中,工作表名称不在工作表XML中。由于Microsoft最著名的原因,它们是_rels结构的双重间接对象。
那么如何使他们获得poi?
以下方法有效,但是速度很慢。例如。扫描7兆工作簿从4秒缩短到19秒。
FileInputStream is = new FileInputStream(filename);
Workbook wb = new XSSFWorkbook(is);
for (int sx=0; sx<wb.getNumberOfSheets(); sx++) {
System.out.println("Sheet: " + sx + " " + wb.getSheetName(sx));
}
那么如何有效地做到这一点?而且如果效率低下,两种方法的工作表顺序是否相同?
(POI本身对于.xls二进制格式非常有用。对于.xlsx,仅打开zip并处理XML原始文件可能会更好。但是要感谢POI团队提供了它。)