使用Apache POI打开xls和xlsx

时间:2015-02-09 12:52:53

标签: java excel apache-poi xls xlsx

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

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

InputStream myExcelFile = new ByteArrayInputStream(file.getData());

这样我可以打开xls文件:

HSSFWorkbook hsf = new HSSFWorkbook(myxls);

这样我可以打开xlsx文件:

XSSFWorkbook xsf = new XSSFWorkbook(myxls);

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

4 个答案:

答案 0 :(得分: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
}

上述方法将起作用。

但是如果你正在处理大文件,你有可能得到File ByteArayInputStream。在这种情况下,波纹管方法应该有效。

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.
}

答案 1 :(得分:3)

这将完成工作:

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
}

无论如何,如果您想在使用之前知道文件的真实类型,可以使用Apache Tika

答案 2 :(得分:3)

您可以让POI为您完成工作,方法是使用WorkbookFactory自动为您检测检测到的文件扩展名。

Workbook w = WorkbookFactory.create(new File("hello.xls"));

当然,您可以使用Apache Tika为您检测文件格式!

答案 3 :(得分:1)

我建议您使用Apache Commons IO中的FilenameUtils.getExtension :

String ext = FilenameUtils.getExtension(“文件路径”);