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

(图片来源网络,侵删)
使用Apache POI合并单元格
Apache POI是最常用的Java操作Excel的库之一。
基本步骤
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
public class MergeCellsExample {
public static void main(String[] args) throws Exception {
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 创建工作表
Sheet sheet = workbook.createSheet("合并单元格示例");
// 创建行和单元格
Row row1 = sheet.createRow(0);
Cell cellA1 = row1.createCell(0);
cellA1.setCellValue("合并A1:C1");
Row row2 = sheet.createRow(1);
Cell cellA2 = row2.createCell(0);
cellA2.setCellValue("A2单元格");
// 合并单元格 (起始行, 结束行, 起始列, 结束列)
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
// 写入文件
try (FileOutputStream out = new FileOutputStream("merged_cells.xlsx")) {
workbook.write(out);
}
// 关闭工作簿
workbook.close();
}
}
常用合并方法
-
合并单个区域:
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0)); // 合并A1:A2
-
合并多个区域:
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2)); // 合并A1:C1 sheet.addMergedRegion(new CellRangeAddress(1, 2, 1, 2)); // 合并B2:C3
-
合并所有空单元格:
(图片来源网络,侵删)// 需要自己实现逻辑遍历并合并
使用EasyExcel合并单元格
EasyExcel是阿里巴巴开源的Excel处理库,性能更好。
基本步骤
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.util.ArrayList;
import java.util.List;
public class EasyExcelMergeExample {
public static void main(String[] args) throws Exception {
// 准备数据
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);
// 创建Excel写入器
ExcelWriter excelWriter = EasyExcel.write(new FileOutputStream("easyexcel_merged.xlsx")).build();
// 创建写入表
WriteSheet writeSheet = EasyExcel.writerSheet("合并示例").build();
// 创建表格并设置合并
WriteTable writeTable = new WriteTable();
writeTable.setHead(data.subList(0, 1));
// 自定义样式
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontHeightInPoints((short)11);
headWriteCellStyle.setWriteFont(headWriteFont);
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
WriteFont contentWriteFont = new WriteFont();
contentWriteFont.setFontHeightInPoints((short)10);
contentWriteCellStyle.setWriteFont(contentWriteFont);
HorizontalCellStyleStrategy horizontalCellStyleStrategy =
new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
// 写入数据
excelWriter.write(data, writeSheet);
// 合并单元格 (行1, 行2, 列1, 列2)
excelWriter.merge(0, 0, 0, 2, "合并的标题");
// 关闭写入器
excelWriter.finish();
}
}
注意事项
- 合并后的内容:合并后只有左上角的单元格有内容,其他单元格为空
- 样式继承:合并后的单元格会继承左上角单元格的样式
- 性能考虑:大量合并操作可能影响性能,建议只在必要时使用
- 文件格式:
.xlsx格式支持合并,.xls也支持但功能有限
高级技巧
- 动态合并:根据数据内容动态决定是否合并
- 合并后设置样式:合并后可以单独设置合并区域的样式
- 取消合并:可以通过
sheet.getMergedRegions()获取合并区域,然后sheet.removeMergedRegion()取消
希望这些示例能帮助你在Java中实现Excel单元格合并功能!

(图片来源网络,侵删)
