You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache POI实现XSSFWorkbook所有工作表单元格居中对齐问题

问题分析与解决方案

你的代码存在两个关键问题导致文本未居中:

  1. 只设置了垂直居中,缺少水平居中的配置,单元格默认是左对齐,所以文本不会呈现水平居中效果。
  2. getColumnHelper().setColDefaultStyle 仅对后续新创建的单元格生效,已经存在的单元格不会自动继承这个列默认样式,必须手动为每个已有单元格应用样式。

修正后的代码

XSSFCellStyle cellStyle = workbook.createCellStyle();
// 同时配置水平和垂直居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setAlignment(HorizontalAlignment.CENTER);

for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
    XSSFSheet sheet = workbook.getSheetAt(i);
    if (sheet.getRow(0) == null) {
        continue;
    }

    // 1. 设置列默认样式(对后续新建的单元格生效)
    int lastColNum = sheet.getRow(0).getLastCellNum();
    for (int j = 0; j < lastColNum; j++) {
        sheet.autoSizeColumn(j);
        sheet.getColumnHelper().setColDefaultStyle(j, cellStyle);
    }

    // 2. 遍历所有已有单元格,手动应用居中样式
    for (Row row : sheet) {
        for (Cell cell : row) {
            cell.setCellStyle(cellStyle);
        }
    }
}

额外注意事项

  • 若表格包含合并单元格,需单独处理:通过 sheet.getMergedRegions() 获取所有合并区域,为每个区域的顶部单元格设置样式(合并单元格的样式由顶部单元格决定)。
  • 务必复用CellStyle:不要在循环内重复创建样式,否则会导致Excel文件体积过大,甚至触发POI的样式数量上限,你当前全局创建一个样式的做法是正确的。

内容的提问来源于stack exchange,提问作者Discipulos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:25:57