Java POI 操作 Excel 读取与写入

1,555 阅读1分钟

@[toc]

前提:使用 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;
}