用Apache POI打开xls和xlsx

问题描述:

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

我不知道一个文件是xls还是xlsx。我只有这样的事:

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

这样我可以打开XLS文件:

HSSFWorkbook hsf = new HSSFWorkbook(myxls); 

而且这样我可以打开XLSX文件:

XSSFWorkbook xsf = new XSSFWorkbook(myxls); 

我怎样都可以打开如果我不知道格式文件的类型?

+0

使用try任一文件的扩展名,或如果这是不足够的,然后确定基于MIME类型http://*.com/questions/4212861/what-is-a-correct-mime- type-for-docx-pptx-etc using http://*.com/questions/51438/getting-a-files-mime-type-in​​-java – EpicPandaForce 2015-02-09 12:56:59

这将做的工作:

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

+0

对不起,我无法在poi库中找到WorkbookFactory ... – user2783755 2015-02-09 13:09:20

+0

你正在使用哪个版本? – 2015-02-09 13:10:46

+2

看看[这个问题](http://*.com/questions/14067983/apache-poi-3-9-workbookfactory-method-not-found) – 2015-02-09 13:13:46

我推荐竟被使用此FilenameUtils.getExtension从Apache Commons IO

字符串EXT = FilenameUtils.getExtension( “文件路径”);

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

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

当然,您可以使用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。在这种情况下,波纹管方法将起作用。

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