前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【开发日记】Java读取Excel文件数据

【开发日记】Java读取Excel文件数据

作者头像
全栈开发日记
发布2024-02-28 14:33:59
1200
发布2024-02-28 14:33:59
举报
文章被收录于专栏:全栈开发日记全栈开发日记

记录一个Excel文件读取的工具类,相信不少朋友都在开发时,处理Excel文件时不知如何解决。下面就看一下这个问题如何解决。

分享一下我的解决方案

第一步先创建一个Excel文件,在其中添加内容

第二步导入依赖

当然你也可以使用其他版本,旧版本的Excel使用的依赖不是同一个

代码语言:javascript
复制
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>

接下来写一个main函数

代码语言:javascript
复制
public static void main(String[] args) {
        try {
            // 1. 通过文件路径创建文件输入流
            FileInputStream fileInputStream = new FileInputStream(new File("D:\\work\\javassit\\IndividualTest\\newExcel.xlsx"));

            // 2. 创建工作簿对象
            Workbook workbook = new XSSFWorkbook(fileInputStream);

            // 3. 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);

            // 4. 迭代每一行
            for (Row row : sheet) {
                // 5. 迭代每一列
                for (Cell cell : row) {
                    // 6. 根据单元格类型读取数据
                    switch (cell.getCellType()) {
                        case STRING:
                            System.out.print(cell.getStringCellValue() + "\t");
                            break;
                        case NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "\t");
                            break;
                        case BOOLEAN:
                            System.out.print(cell.getBooleanCellValue() + "\t");
                            break;
                        case BLANK:
                            System.out.print("BLANK\t");
                            break;
                        default:
                            System.out.print("UNKNOWN\t");
                    }
                }
                System.out.println(); // 换行
            }

            // 7. 关闭文件输入流
            fileInputStream.close();
            // 8. 关闭工作簿
            workbook.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
}

测试一下,结果打印正常

接下来将它封装为一个工具类,请求参数为文件地址返回参数为一个list

代码语言:javascript
复制
    /**
     * 读取excel数据写到集合中
     * @param excelFilePath 文件地址
     * @return
     */
    static List<List<String>> readExcel(String excelFilePath) {
        // 存储Excel数据的List
        List<List<String>> excelData = new ArrayList<>();

        try (FileInputStream fis = new FileInputStream(excelFilePath);
             XSSFWorkbook workbook = new XSSFWorkbook(fis)) {

            // 仅处理第一个Sheet
            Iterator<Row> rowIterator = workbook.getSheetAt(0).iterator();

            // 迭代处理每一行
            while (rowIterator.hasNext()) {
                Row row = rowIterator.next();
                Iterator<Cell> cellIterator = row.iterator();

                // 存储一行数据的List
                List<String> rowData = new ArrayList<>();
                // 迭代处理每个单元格
                while (cellIterator.hasNext()) {
                    Cell cell = cellIterator.next();
                    // 将所有单元格的内容转为String类型
                    rowData.add(cellToString(cell));
                }

                // 将一行数据添加到总数据List中
                excelData.add(rowData);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return excelData;
    }

    /**
     * 将单元格内容转为String
     * @param cell 单个单元格对象
     * @return
     */
    private static String cellToString(Cell cell) {
        //获取 Excel 单元格的数据类型
        switch (cell.getCellType()) {
            //字符串类型
            case STRING:
                return cell.getStringCellValue();
            //数字类型(包括日期和时间)
            case NUMERIC:
                return Double.toString(cell.getNumericCellValue());
            //布尔类型
            case BOOLEAN:
                return Boolean.toString(cell.getBooleanCellValue());
            //单元格为空
            case BLANK:
                return "";
            //其他类型
            default:
                return "";
        }
    }

测试一下工具类。

代码语言:javascript
复制
    public static void main(String[] args) {
        //读取excel数据写到集合中
        List<List<String>> excelData = readExcel("D:\\work\\javassit\\IndividualTest\\newExcel.xlsx");

        // 打印读取的数据
        for (List<String> row : excelData) {
            for (String cellValue : row) {
                System.out.print(cellValue + "\t");
            }
            System.out.println();
        }


    }

结果也正常。

你也可以将它进行改造,使它符合你需要的功能。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分享一下我的解决方案
    • 第一步先创建一个Excel文件,在其中添加内容
      • 第二步导入依赖
        • 接下来写一个main函数
          • 测试一下,结果打印正常
            • 接下来将它封装为一个工具类,请求参数为文件地址返回参数为一个list
              • 测试一下工具类。
                • 结果也正常。
                  • 你也可以将它进行改造,使它符合你需要的功能。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档