我正在尝试阅读一个excel文件(xlsx NOT xls),但没有任何运气。我尝试了jexcel api,但它不支持xlsx扩展,然后我尝试了Apache api需要工作并尝试从他们的网站上的例子但没有运气。我无法通过读取文件阶段并得到一个filenotfound异常。还使用了poi-ooxml-3.6.jar,xmlbeans-2.6.0和poi-3.7.jar。
任何人都可以向我解释我需要使用什么类型的api / classes /库以及如何在eclipse中使用它(外部库/ classes / api对我来说是全新的)
提前谢谢了
Apache POI是一个读取xls和xlsx格式的好库。
要读取文件,只需通过传递带有Excel文件路径的新FileInputStream来实例化新的qazxsw poi:
XSSFWorkbook
或者使用输入流(比文件占用更多内存):
XSSFWorkbook workbook = new XSSFWorkbook(OPCPackage.open(new File("foo.xslx")));
有了XSSFWorkbook workbook = new XSSFWorkbook(myInputStream);
之后,用它来遍历所有细胞(XSSFWorkbook
)。
下载Apache POI 3.9 example
使用POI 3.8和poi-ooxml-3.8,我已经成功完成了这样的事情(我没有尝试过旧版本):
here
InputStream is = //Open file, and get inputstream
Workbook workBook = WorkbookFactory.create(is);
int totalSheets = workBook.getNumberOfSheets();
for (int i = 0; i <= totalSheets - 1; i++) {
Sheet sheet = workBook.getSheetAt(i);
// Do something with the sheet
}
将自动确定该文件是旧XLS还是更新的XLSX并返回正确版本的WorkbookFactory
。其余代码只是迭代其中包含的工作表的示例。
我最终使用了AbstractExcelView的这个修改
Workbook
在代码中添加以下依赖项。
https://github.com/hmkcode/Spring-Framework/blob/master/spring-mvc-json-pdf-xls-excel/src/main/java/com/hmkcode/view/abstractview/AbstractExcelView.java
另外,要阅读excel文件,请使用以下代码,它将同时适用于.xls和.xlsx文件。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
在pom.xml中添加依赖项 -
Workbook workbook = WorkbookFactory.create(inputStream);
Excel 2007或更高版本(.xlsx) - 示例代码 -
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.3</version>
</dependency>
2)
//reading data from byte array
OPCPackage pkg = OPCPackage.open(new ByteArrayInputStream(data));
Workbook wb = new XSSFWorkbook(pkg);
Sheet sheet = wb.getSheetAt(0);
Iterator<Row> rows = sheet.rowIterator();
while (rows.hasNext()) {
int j = 5;
Person person= new Person ();
Row row = rows.next();
if (row.getRowNum() > 0) {
person.setPersonId((int)(row.getCell(0).getNumericCellValue()));
person.setFirstName(row.getCell(1).getStringCellValue());
person.setLastName(row.getCell(2).getStringCellValue());
person.setGroupId((int)(row.getCell(3).getNumericCellValue()));
person.setUserName(row.getCell(4).getStringCellValue());
person.setCreditId((int)(row.getCell(5).getNumericCellValue()));
}
}
Excel 1998-2003文件(.xls) - 您可以使用HSSF库。只需使用:工作簿wb =新HSSFWorkbook(pkg);