使用Apache POI打开xls和xlsx

use*_*755 1 java excel xls xlsx apache-poi

我想用Apache POI打开我的excel文件.

我不知道文件是xls还是xlsx.我只有这样的东西:

InputStream myExcelFile = new ByteArrayInputStream(file.getData());
Run Code Online (Sandbox Code Playgroud)

这样我可以打开xls文件:

HSSFWorkbook hsf = new HSSFWorkbook(myxls);
Run Code Online (Sandbox Code Playgroud)

这样我可以打开xlsx文件:

XSSFWorkbook xsf = new XSSFWorkbook(myxls);
Run Code Online (Sandbox Code Playgroud)

如果我不知道格式,如何打开这两种类型的文件?

小智 6

Workbook wb = WorkbookFactory.create(myExcelFile);
if (wb instanceof HSSFWorkbook) {
    // do whatever
} else if (wb instanceof SXSSFWorkbook) {
    // do whatever
} else if (wb instanceof XSSFWorkbook) {
    // do whatever
}
Run Code Online (Sandbox Code Playgroud)

上述方法将起作用.

但是如果你正在处理大文件,你有可能得到FileByteArayInputStream.在这种情况下,波纹管方法应该起作用.

ByteArayInputStream bais = new ByteArrayInputStream(file.getData());

if(bais != null && POIFSFileSystem.hasPOIFSHeader(bais)) {
    System.out.println(".xls extention excel file");
    //do whatever
}
else if(bais != null && POIXMLDocument.hasOOXMLHeader(bais)) {
    System.out.println(".xlsx extention excel file");
    //do whatever
}
else {
    //wrong file format. throw exception.
}
Run Code Online (Sandbox Code Playgroud)