杰瑞科技汇

Java POI如何合并Excel单元格?

Java 使用 Apache POI 合并 Excel 单元格

Apache POI 是一个流行的 Java API,用于处理 Microsoft Office 格式文件,包括 Excel,下面我将介绍如何使用 POI 合并 Excel 单元格。

Java POI如何合并Excel单元格?-图1
(图片来源网络,侵删)

基本步骤

  1. 创建工作簿 (Workbook)
  2. 获取或创建工作表 (Sheet)
  3. 获取行 (Row) 和单元格 (Cell)
  4. 使用 addMergedRegion() 方法合并单元格

示例代码

创建新 Excel 并合并单元格

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class MergeCellsExample {
    public static void main(String[] args) {
        // 创建新的工作簿
        Workbook workbook = new XSSFWorkbook();
        // 创建工作表
        Sheet sheet = workbook.createSheet("合并单元格示例");
        // 创建标题行
        Row titleRow = sheet.createRow(0);
        Cell titleCell = titleRow.createCell(0);
        titleCell.setCellValue("合并单元格示例");
        // 合并单元格 (从第0行第0列到第0行第2列)
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
        // 创建一些数据
        Row dataRow1 = sheet.createRow(1);
        dataRow1.createCell(0).setCellValue("姓名");
        dataRow1.createCell(1).setCellValue("年龄");
        dataRow1.createCell(2).setCellValue("城市");
        Row dataRow2 = sheet.createRow(2);
        dataRow2.createCell(0).setCellValue("张三");
        dataRow2.createCell(1).setCellValue(25);
        dataRow2.createCell(2).setCellValue("北京");
        // 合并单元格 (从第2行第0列到第3行第0列)
        sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 0));
        try (FileOutputStream fileOut = new FileOutputStream("合并单元格示例.xlsx")) {
            workbook.write(fileOut);
            System.out.println("Excel文件创建成功!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                workbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

读取现有 Excel 并合并单元格

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class MergeExistingCells {
    public static void main(String[] args) {
        try (FileInputStream fileIn = new FileInputStream("现有文件.xlsx");
             Workbook workbook = new XSSFWorkbook(fileIn)) {
            Sheet sheet = workbook.getSheet("Sheet1");
            // 合并单元格 (从第1行第1列到第3行第3列)
            sheet.addMergedRegion(new CellRangeAddress(1, 3, 1, 3));
            try (FileOutputStream fileOut = new FileOutputStream("修改后的文件.xlsx")) {
                workbook.write(fileOut);
                System.out.println("Excel文件修改成功!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

高级合并选项

合并单元格并设置样式

// 创建样式
CellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER); // 水平居中
style.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
style.setBorderBottom(BorderStyle.THIN);
style.setBorderTop(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
// 创建单元格并应用样式
Cell cell = titleRow.createCell(0);
cell.setCellValue("合并单元格示例");
cell.setCellStyle(style);
// 合并单元格
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));

检查单元格是否已合并

// 检查指定区域是否已合并
for (int i = 0; i < sheet.getNumMergedRegions(); i++) {
    CellRangeAddress mergedRegion = sheet.getMergedRegion(i);
    if (mergedRegion.isInRange(2, 0)) { // 检查第2行第0列是否在合并区域内
        System.out.println("该单元格已合并");
        break;
    }
}

取消合并单元格

// 取消合并单元格
sheet.removeMergedRegion(0); // 参数是合并区域的索引

注意事项

  1. 合并区域不能重叠
  2. 合并后,只有左上角的单元格有值,其他单元格为空
  3. 读取合并区域时,可以使用 sheet.getMergedRegion() 获取合并信息
  4. 对于大数据量操作,建议使用 SXSSFWorkbook (流式 API) 来避免内存问题

希望这些示例能帮助你在 Java 中使用 Apache POI 合并 Excel 单元格!

Java POI如何合并Excel单元格?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇