用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);
我怎样都可以打开如果我不知道格式文件的类型?
这将做的工作:
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。
对不起,我无法在poi库中找到WorkbookFactory ... – user2783755 2015-02-09 13:09:20
你正在使用哪个版本? – 2015-02-09 13:10:46
看看[这个问题](http://stackoverflow.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.
}
使用try任一文件的扩展名,或如果这是不足够的,然后确定基于MIME类型http://stackoverflow.com/questions/4212861/what-is-a-correct-mime- type-for-docx-pptx-etc using http://stackoverflow.com/questions/51438/getting-a-files-mime-type-in-java – EpicPandaForce 2015-02-09 12:56:59