对于同时支持HSSF
以及XSSF
读取和重写*.xls
和*.xlsx
,你会使用WorkbookFactory创建工作簿。这是能够创造Workbook
从InputStream
的*.xls
以及的*.xlsx
文件。
FileInputStream fileinputstream = new FileInputStream("pathToExcelFile.xls_or_.xlsx");
Workbook workbook = WorkbookFactory.create(fileinputstream);
然后,您将尽可能地使用Package org.apache.poi.ss.usermodel包的接口,而不是特殊的HSSF
或XSSF
类的接口。
apache poi
到目前为止,这并不总是可行的。但是,如果不可能,您可以通过instanceof
实际使用的对象(HSSF
或XSSF
)进行检测。
而对于写,你会使用相关的适当的方法instanceof
的Workbook
。
if (workbook instanceof XSSFWorkbook) {
workbook.write(new FileOutputStream("pathToExcelFile.xlsx"));
} else if (workbook instanceof HSSFWorkbook) {
workbook.write(new FileOutputStream("pathToExcelFile.xls"));
}
workbook.close();
截至apache poi 3.17
Workbook.write
已关闭OutputStream
。现在在apache poi 4.0.*
版本中,它不再关闭OutputStream
。所以我们需要使用
FileOutputStream out = null;
if (workbook instanceof XSSFWorkbook) out = new FileOutputStream("pathToExcelFile.xlsx");
else if (workbook instanceof HSSFWorkbook) out = new FileOutputStream("pathToExcelFile.xls");
if (out != null) {
workbook.write(out);
out.close();
}
workbook.close();