使用Java POI合并Excel单元格
Apache POI是Java操作Microsoft Office格式文件(如Excel)的常用库,以下是使用POI合并Excel单元格的详细方法:

基本步骤
- 创建
Workbook对象(如XSSFWorkbook用于.xlsx格式) - 获取或创建
Sheet对象 - 创建
CellRangeAddress对象指定要合并的单元格范围 - 使用
Sheet.addMergedRegion()方法合并单元格
示例代码
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 row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("合并后的单元格");
// 定义要合并的单元格范围(从第0行到第2行,第0列到第2列)
CellRangeAddress range = new CellRangeAddress(0, 2, 0, 2);
// 合并单元格
sheet.addMergedRegion(range);
// 可选:设置合并后单元格的样式
CellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
cell.setCellStyle(style);
// 写入文件
try (FileOutputStream outputStream = new FileOutputStream("merged_cells.xlsx")) {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}
// 关闭工作簿
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
更复杂的示例(合并多个区域)
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class MultipleMergeExample {
public static void main(String[] args) {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("多区域合并");
// 第一个合并区域
Row row1 = sheet.createRow(0);
Cell cell1 = row1.createCell(0);
cell1.setCellValue("标题1");
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
// 第二个合并区域
Row row2 = sheet.createRow(1);
Cell cell2 = row2.createCell(0);
cell2.setCellValue("标题2");
sheet.addMergedRegion(new CellRangeAddress(1, 2, 0, 0));
// 第三个合并区域
Row row3 = sheet.createRow(3);
Cell cell3 = row3.createCell(1);
cell3.setCellValue("跨列合并");
sheet.addMergedRegion(new CellRangeAddress(3, 3, 1, 3));
// 写入文件
try (FileOutputStream outputStream = new FileOutputStream("multiple_merged.xlsx")) {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意事项
- 合并区域内的数据:只有左上角的单元格会保留数据,其他单元格的数据会被忽略
- 样式设置:合并后单元格的样式由左上角单元格决定
- 性能考虑:合并大量单元格可能会影响性能
- 文件格式:
.xlsx格式使用XSSFWorkbook.xls格式使用HSSFWorkbook
- 取消合并:可以使用
sheet.removeMergedRegion(index)方法取消合并
取消合并单元格的示例
// 获取合并区域数量
int mergedRegions = sheet.getNumMergedRegions();
// 取消第一个合并区域
if (mergedRegions > 0) {
sheet.removeMergedRegion(0);
}
希望这些信息能帮助你使用Java POI合并Excel单元格!

