2

我正在尝试读取一个 excel 文件(xlsx 不是 xls),但没有任何运气。我尝试了 jexcel api,但它不支持 xlsx 扩展,然后我尝试了需要工作的 Apache api,还尝试了他们网站上的示例,但没有运气。我无法通过读取文件阶段并获得一个文件未找到异常。还使用了 poi-ooxml-3.6.jar、xmlbeans-2.6.0 和 poi-3.7.jar。

谁能向我解释一下我需要使用哪些类型的 api/classes/libraries 以及如何在 eclipse 中使用它(外部库/classes/api 对我来说是全新的)

提前谢谢了

4

5 回答 5

5

Apache POI 是一个很好的读取 xsl 和 xslx 格式的库。

要读取文件,只需XSSFWorkbook通过传递带有 Excel 文件路径的新 FileInputStream 来实例化一个新文件:

XSSFWorkbook workbook = new XSSFWorkbook(OPCPackage.open(new File("foo.xslx")));

或者使用输入流(比文件占用更多内存):

XSSFWorkbook workbook = new XSSFWorkbook(myInputStream);

拥有 a 后XSSFWorkbook,使用它遍历所有单元格(示例)。

在此处下载 Apache POI 3.9

于 2012-12-21T21:19:05.540 回答
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. 其余代码只是迭代其中包含的工作表的示例。

于 2012-12-21T21:19:34.357 回答
1

在您的代码中添加以下依赖项。

<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);
于 2018-08-27T07:08:38.567 回答
0

我最终使用了 AbstractExcelView 的这种修改

https://github.com/hmkcode/Spring-Framework/blob/master/spring-mvc-json-pdf-xls-excel/src/main/java/com/hmkcode/view/abstractview/AbstractExcelView.java

于 2013-12-09T21:14:03.307 回答
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 库。只需使用:Workbook wb = new HSSFWorkbook(pkg);

于 2018-08-30T12:34:55.610 回答