easyexcel 合并单元格 居中
时间: 2025-01-04 20:28:28 浏览: 11
### 使用 EasyExcel 实现合并单元格并设置居中样式的示例
为了实现合并单元格以及应用居中样式,在创建 `WriteSheet` 或者 `WriteTable` 的时候可以注册一个自定义的写处理器来控制这些属性。
下面是一个完整的例子,展示了如何通过 `registerWriteHandler()` 方法注册一个 `MergeStrategy` 来指定哪些区域应该被合并,并且设置了居中的样式:
```java
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.handler.AbstractCellWriteHandler;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
public class MergeAndCenterExample {
public static void main(String[] args) {
String fileName = "example.xlsx";
List<List<String>> data = Arrays.asList(
Arrays.asList("姓名", "年龄"),
Arrays.asList("张三", "28"),
Arrays.asList("李四", "30")
);
// 创建表单
WriteSheet writeSheet = EasyExcel.writerSheet()
.build();
// 注册写处理器用于合并单元格和设置样式
writeSheet.setRegisterWriteHandler(new AbstractCellWriteHandler() {
@Override
protected void doAfterAllAnalysed(AnalysisContext context) {}
@Override
protected void afterCellDispose(CellData cellData, Cell cell,
Head head, Integer relativeRowIndex, Boolean isHead) {
if (isHead && relativeRowIndex == 0) { // 只针对头部执行操作
Sheet sheet = cell.getSheet();
// 设置水平居中
CellStyle style = sheet.getWorkbook().createCellStyle();
style.setAlignment(HorizontalAlignment.CENTER);
cell.setCellStyle(style);
// 合并第一行的第一个到第二个单元格
sheet.addMergedRegion(new CellRangeAddress(relativeRowIndex,
relativeRowIndex,
0, 1));
}
}
});
// 导出文件
EasyExcel.write(fileName)
.sheet("Sheet1")
.doWrite(data);
}
}
```
此代码片段实现了以下功能:
- 定义了一个简单的二维列表作为要写出的数据。
- 构建了 `WriteSheet` 对象,并为其指定了一个匿名内部类形式的 `AbstractCellWriteHandler` 处理器。
- 在该处理器内重写了 `afterCellDispose` 方法,当处理的是表头(`isHead`)并且是在第零行时,则会为当前单元格应用居中式样,并且将第一个至最后一个列之间的所有单元格合并在一起[^1]。
阅读全文