POI操作EXCEL合并单元格详解
在使用 POI 处理 Excel 时,合并单元格是常见需求,比如制作表头、合并相同内容的单元格等。下面详细介绍如何通过 POI 实现单元格合并,并补充相关注意事项。
核心类与方法
POI 中合并单元格的核心类是 CellRangeAddress,通过它定义需要合并的单元格范围,再调用工作表的 addMergedRegion 方法完成合并。
CellRangeAddress构造方法
用于定义合并的单元格区域,参数含义如下:1
CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
firstRow:起始行索引(从 0 开始)lastRow:终止行索引(包含)firstCol:起始列索引(从 0 开始)lastCol:终止列索引(包含)
Sheet.addMergedRegion方法
将定义好的单元格范围添加到工作表中,完成合并:1
sheet.addMergedRegion(cellRangeAddress);
示例代码
以下是一个完整的示例,演示如何在 Excel 中合并单元格(以 XSSF 为例,适用于.xlsx格式):
maven依赖
1 | <dependency> |
1 | import org.apache.poi.ss.usermodel.*; |
注意事项
合并后的数据显示
合并单元格后,只有左上角第一个单元格的数据会被保留,其他被合并的单元格数据会被覆盖。因此,需确保只在左上角单元格中设置值。单元格样式
合并后的单元格样式需单独设置(作用于左上角单元格),否则可能继承原单元格样式导致显示不一致。例如:1
2
3
4
5
6
7
8// 设置标题单元格样式(居中、加粗)
CellStyle titleStyle = workbook.createCellStyle();
Font titleFont = workbook.createFont();
titleFont.setBold(true);
titleStyle.setFont(titleFont);
titleStyle.setAlignment(HorizontalAlignment.CENTER); // 水平居中
titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
titleCell.setCellStyle(titleStyle);
版本兼容性
- 对于
.xls格式(Excel 2003 及以前),使用HSSFWorkbook和HSSFSheet。 - 对于
.xlsx格式(Excel 2007 及以后),使用XSSFWorkbook和XSSFSheet。
两者的合并单元格方法完全一致,仅工作簿和工作表的类不同。
- 对于
解除合并
若需解除合并,可使用Sheet.removeMergedRegion(int index)方法,其中index是合并区域在工作表中的索引(可通过Sheet.getNumMergedRegions()获取总数)。大数据量合并
大量合并单元格可能影响 Excel 性能,建议仅在必要时使用,避免过度合并。