Java读取本地Excel文件(.xlsx与.xls)

Java读取本地Excel文件(.xlsx与.xls)


import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.poifs.filesystem.POIFSFileSystem;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.*;

import java.util.ArrayList;

import java.util.List;

/**

* 读取本地Excel文件(.xlsx与.xls)

* XSSFWorkbook支持.xlsx

* HSSFWorkbook支持.xlt与.xls

* 需导入依赖

* <dependency>

* <groupId>org.apache.poi</groupId>

* <artifactId>poi</artifactId>

* <version>4.0.1</version>

* </dependency>

*

* <dependency>

* <groupId>org.apache.poi</groupId>

* <artifactId>poi-ooxml</artifactId>

* <version>4.0.1</version>

* </dependency>

*/

    public static void readExcel(String filePath) {

        try {

            /*

            *简单判断后缀名,如需通过文件流判断文件类型,

            * 请调用getFileTypeByStream方法

            * Excel( xls) 文件头:504B03

            * Excel( xlsx) 文件头:D0CF11

            * */

            boolean xls = filePath.endsWith(".xls");

            boolean xlsx = filePath.endsWith(".xlsx");

            Workbook book;

            Sheet sheet = null;

            InputStream inputStream = new FileInputStream(new File(filePath));

            if (xls) {

                // 解析excel

                POIFSFileSystem pSystem = new POIFSFileSystem(inputStream);

                // 获取整个excel

                book = new HSSFWorkbook(pSystem);

                //获取第一个表单sheet

                sheet = book.getSheetAt(0);

            }

            if (xlsx) {

                // 直接通过流获取整个excel

                book = new XSSFWorkbook(inputStream);

                // 获取第一个表单sheet

                sheet = book.getSheetAt(0);

            }

            if (sheet != null) {

                // 获取第一行

                int firstRow = sheet.getFirstRowNum();

                // 获取最后一行

                int lastRow = sheet.getLastRowNum();

                // 循环行数依次获取列数

                for (int i = firstRow; i < lastRow + 1; i++) {

                    // 获取第 i 行

                    Row row = sheet.getRow(i);

                    if (row != null) {

                        // 获取此行的第一列

                        int firstCell = 0;

                        /*

                        *获取此行的存在数据的第一列

                        * int firstCell = row.getFirstCellNum();

                        * */

                        // 获取此行的存在数据的最后一列

                        int lastCell = row.getLastCellNum();

                        // 创建集合,保存每一行的每一列

                        List<String> list = new ArrayList<>();

                        for (int j = firstCell; j < lastCell; j++) {

                            // 获取第 j 列

                            Cell cell = row.getCell(j);

                            if (cell != null) {

                                list.add(cell.toString());

                            } else {

                                list.add("");

                            }

                        }

                        System.out.println(list);

                    }

                }

            }

            inputStream.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }


更多方法访问Java工具网utils.net.cn

每个方法单独使用,不互相依赖,持续更新!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。