使用 Apache POI 打开 xls 和 xlsx
Open xls and xlsx with Apache POI
我想用 Apache POI 打开我的 excel 文件。
我不知道文件是 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.
我会推荐使用来自 Apache Commons IO 的 FilenameUtils.getExtension
:
字符串分机号 = FilenameUtils.getExtension("path to the file");
您可以让 POI 为您完成这项工作,方法是使用 WorkbookFactory
自动为您打开检测到的文件扩展名。
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.
}
我想用 Apache POI 打开我的 excel 文件。
我不知道文件是 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.
我会推荐使用来自 Apache Commons IO 的 FilenameUtils.getExtension :
字符串分机号 = FilenameUtils.getExtension("path to the file");
您可以让 POI 为您完成这项工作,方法是使用 WorkbookFactory
自动为您打开检测到的文件扩展名。
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.
}