Java中合并Excel单元格的方法
在Java中合并Excel单元格,常用的库有Apache POI和EasyExcel,以下是使用这两种库实现单元格合并的方法:

使用Apache POI合并单元格
Apache POI是Java操作Excel最常用的库之一。
基本步骤
- 创建或打开工作簿
- 获取工作表
- 使用
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("合并的单元格");
// 合并单元格 (起始行, 结束行, 起始列, 结束列)
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); // 合并第1行的第1-3列
// 写入文件
try (FileOutputStream out = new FileOutputStream("merged_cells.xlsx")) {
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
更复杂的合并示例
// 合并多行多列
sheet.addMergedRegion(new CellRangeAddress(1, 3, 0, 0)); // 合并第2-4行的第1列
sheet.addMergedRegion(new CellRangeAddress(1, 1, 1, 3)); // 合并第2行的第2-4列
// 设置合并后单元格的样式
CellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
style.setVerticalAlignment(VerticalAlignment.CENTER);
Cell mergedCell = sheet.getRow(1).getCell(1);
if (mergedCell == null) {
mergedCell = sheet.getRow(1).createCell(1);
}
mergedCell.setCellStyle(style);
使用EasyExcel合并单元格
EasyExcel是阿里巴巴开源的Excel处理库,性能更好,API更简洁。
示例代码
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteTable;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class EasyExcelMergeExample {
public static void main(String[] args) {
String fileName = "easyexcel_merge.xlsx";
// 创建ExcelWriter
ExcelWriter excelWriter = EasyExcel.write(fileName).build();
// 创建工作表
WriteSheet writeSheet = EasyExcel.writerSheet("合并单元格").build();
// 创建数据
List<List<String>> data = new ArrayList<>();
List<String> header = new ArrayList<>();
header.add("姓名");
header.add("年龄");
header.add("性别");
data.add(header);
List<String> row1 = new ArrayList<>();
row1.add("张三");
row1.add("25");
row1.add("男");
data.add(row1);
List<String> row2 = new ArrayList<>();
row2.add("李四");
row2.add("30");
row2.add("女");
data.add(row2);
List<String> row3 = new ArrayList<>();
row3.add("王五");
row3.add("28");
row3.add("男");
data.add(row3);
// 写入数据
excelWriter.write(data, writeSheet);
// 合并单元格 (行, 列, 结束行, 结束列)
excelWriter.merge(1, 3, 0, 0, "姓名列合并");
// 关闭资源
excelWriter.finish();
}
}
注意事项
- 合并后单元格的值:合并区域的左上角单元格将保留值,其他单元格的值会被忽略
- 样式问题:合并后单元格的样式由左上角单元格决定
- 性能考虑:大量合并操作可能影响性能,建议合理使用
- 版本兼容性:不同版本的POIAPI可能有差异,注意版本兼容性
常见问题解决
合并后边框消失
// 设置边框样式 CellStyle style = workbook.createCellStyle(); style.setBorderTop(BorderStyle.THIN); style.setBorderBottom(BorderStyle.THIN); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); // 应用样式到合并后的单元格
合并后文本不居中
// 设置对齐方式 style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER);
希望这些示例能帮助你在Java中实现Excel单元格合并功能!

