Java POI 操作 Excel 读取与写入

本文介绍如何使用JavaPoi库进行Excel表格的多行多列数据读写操作,包括获取Excel文件路径、创建Workbook和Sheet,以及逐行逐列读写数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前提:使用 java poi 的包

一.写入表格操作

/**
 * Excel 中第一个 sheet 页进行多行多列数据写入操作
 *
 * @param excelName Excel 文件名
 * @param data 保存有写入表格多行的数据,类型是 List<String[]>
 */
synchronized public static void writeExcel(String excelName, List<String[]> excelData) throws Exception {
    // 获取 Excel 文件绝对路径
    String absoluteExcelPath = new File("").getCanonicalPath() + "/src/test/resources/" + excelName;
    // 根据 Excel 路径创建 File 文件类
    File excelFile = new File(absoluteExcelPath);
    // 根据 File 文件类创建 Workbook 工作簿类
    Workbook workbook = WorkbookFactory.create(excelFile);
    // 根据 Workbook 获取当前 Sheet 页
    Sheet sheet = workbook.getSheetAt(0);
    /* 开始逐行遍历 */
    for(int rowNum = sheet.getLastRowNum() + 1, i = 0; i < data.size(); rowNum++, i++) {
        // 获取新的没有数据的一行
        Row row = sheet.getRow(rowNum);
        // 拿到当前行数据
        String[] rowData = excelData.get(i);
        /* 开始逐列遍历 */
        for(int columnNum = row.getLastCellNum() + 1, j = 0; j < rowData.length; columnNum++, j++){
            // 单元格存储数据
            row.createCell(columnNum).setCellValue(rowData[j]);
        }
    }
    // 文件输出流
    FileOutputStream out=new FileOutputStream(absoluteExcelPath);
    // 清理
    out.flush();
    // 将 Workbook 中的数据通过流写入
    workbook.write(out);
    // 关闭流
    out.close();
}

二.读表操作

/**
 * Excel 中第一个 sheet 页进行多行多列数据写入操作
 *
 * @param excelName Excel 文件名
 * @return 返回 List<String[]> 类型读取表格的数据
 */
synchronized public static List<String[]> readExcel(String excelName) throws Exception {
    // 获取 Excel 文件绝对路径
    String absoluteExcelPath = new File("").getCanonicalPath() + "/src/test/resources/" + excelName;
    // 根据 Excel 路径创建 File 文件类
    File excelFile = new File(absoluteExcelPath);
    // 根据 File 文件类创建 Workbook 工作簿类
    Workbook workbook = WorkbookFactory.create(excelFile);
    // 根据 Workbook 获取当前 Sheet 页
    Sheet sheet = workbook.getSheetAt(0);
    List<String[]> dataList = new ArrayList<>();
    /* 开始逐行遍历 */
    for(int rowNum = 0, i = 0; i <= sheet.getLastRowNum(); rowNum++, i++) {
        // 获取新的一行
        Row row = sheet.getRow(rowNum);
        // 创建该行对应的 String[] 数组
        String[] rowString = new String[row.getLastCellNum() + 1];
        /* 开始逐列遍历 */
        for(int columnNum = 0, j = 0; j < row.getLastCellNum(); columnNum++, j++){
            // 获取新的一列
            Cell cell = row.getCell(columnNum);
            // 设置 Cell 类型为 String
            cell.setCellType(CellType.STRING);
            // 将单元格内容保存进 String[] 行数组
            rowString[j] = new DataFormatter().formatCellValue(cell);
        }
        // 将各行数组数据保存进 List 集合
        dataList.add(rowString);
    }
    return dataList;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值