阅读excel文件 - > xlsx格式与java

时间:2012-12-21 20:42:16

标签: java apache excel apache-poi xlsx

我正在尝试读取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对我来说是全新的)

非常感谢提前

5 个答案:

答案 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)

答案 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);