我正在尝试读取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对我来说是全新的)
非常感谢提前
答案 0 :(得分:4)
Apache POI是读取xsl和xslx格式的一个很好的库。
通过传递带有Excel文件路径的新FileInputStream来读取文件只是实例化一个新的XSSFWorkbook
:
XSSFWorkbook workbook = new XSSFWorkbook(OPCPackage.open(new File("foo.xslx")));
或者使用输入流(比文件占用更多内存):
XSSFWorkbook workbook = new XSSFWorkbook(myInputStream);
拥有XSSFWorkbook
后,使用它来遍历所有单元格(example)。
下载Apache POI 3.9 here
答案 1 :(得分:2)
使用POI 3.8和poi-ooxml-3.8,我已经取得了类似的成功(我没有尝试旧版本):
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
}
WorkbookFactory
将自动确定该文件是旧XLS还是更新的XLSX并返回正确版本的Workbook
。其余代码只是迭代其中包含的工作表的示例。
答案 2 :(得分:0)
我最终使用了AbstractExcelView的这个修改
答案 3 :(得分:0)
在代码中添加以下依赖项。
<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>
要读取excel文件,请使用以下代码,它既适用于.xls文件,也适用于.xlsx文件。
Workbook workbook = WorkbookFactory.create(inputStream);
答案 4 :(得分:0)
在pom.xml中添加依赖项-
<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>
Excel 2007或更高版本(.xlsx)- 示例代码-
//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()));
}
}
2)
//reading from a file
File file = new File(pathxlsx);
FileInputStream fis = new FileInputStream(file);
Workbook wb = new XSSFWorkbook(fis);
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);