用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); 

如果我不知道格式,我怎样才能打开这两种types的文件?

这将做的工作:

 Workbook wb = WorkbookFactory.create(myExcelFile); 

那么你可以检查工厂创build的确切types:

 if (wb instanceof HSSFWorkbook) { // do whatever } else if (wb instanceof SXSSFWorkbook) { // do whatever } else if (wb instanceof XSSFWorkbook) { // do whatever } 

无论如何,如果你想在使用之前知道文件的真实types,你可以使用Apache Tika 。

 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 。 在这种情况下,波纹pipe方法将起作用。

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

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

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

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

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

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