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

Java生成Excel报表如何设置表头加粗、单元格缩进、价格列右对齐

解决方案

基于Apache POI的CellStyle样式机制即可实现你的三类格式需求,修改后的代码如下:

完整修改后代码

import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;

private static final String CONTENT_TYPE = "multipart/form-data";
private static final String FILE_NAME = "DemoReport";
private static final String FILE_EXTENSION = ".xlsx";
// 按需调整缩进字符数
private static final short INDENTION_NUM = 2;
// 替换为你实际的价格列索引(从0开始计数)
private static final int PRICE_COLUMN_INDEX = 3;

public MultipartFile export(final UUID uuid) throws IOException {
    final XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet("Report");
    int rowCount = 0;

    // ========== 新增:预定义全局单元格样式 ==========
    // 表头加粗字体
    XSSFFont headerFont = workbook.createFont();
    headerFont.setBold(true);
    // 表头样式:加粗 + 缩进
    XSSFCellStyle headerStyle = workbook.createCellStyle();
    headerStyle.setFont(headerFont);
    headerStyle.setIndention(INDENTION_NUM);

    // 普通内容样式:缩进 + 默认左对齐
    XSSFCellStyle commonStyle = workbook.createCellStyle();
    commonStyle.setIndention(INDENTION_NUM);

    // 价格列样式:缩进 + 右对齐
    XSSFCellStyle priceStyle = workbook.createCellStyle();
    priceStyle.setIndention(INDENTION_NUM);
    priceStyle.setAlignment(HorizontalAlignment.RIGHT);
    // POI 3.x旧版本请替换为下方写法
    // priceStyle.setAlignment(CellStyle.ALIGN_RIGHT);
    // ==============================================

    // 写入表头并应用样式
    XSSFRow headerRow = sheet.createRow(rowCount++);
    writeTitles(headerRow, titles);
    for (XSSFCell cell : headerRow) {
        cell.setCellStyle(headerStyle);
    }

    // ========== 新增:数据行写入时应用对应样式 ==========
    // 以下替换你原来省略的写入数据逻辑
    // for (你的业务数据对象 item : 数据列表) {
    //     XSSFRow dataRow = sheet.createRow(rowCount++);
    //     int colIndex = 0;
    //     // 普通列写入
    //     XSSFCell commonCell = dataRow.createCell(colIndex++);
    //     commonCell.setCellValue(item.getXXX());
    //     commonCell.setCellStyle(commonStyle);
    //     // 其他普通列重复上述逻辑...
    //
    //     // 价格列写入
    //     XSSFCell priceCell = dataRow.createCell(PRICE_COLUMN_INDEX);
    //     priceCell.setCellValue(item.getPrice());
    //     priceCell.setCellStyle(priceStyle);
    // }
    // ==============================================

    final File outputFile = File.createTempFile(FILE_NAME, FILE_EXTENSION);
    try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
        workbook.write(outputStream);
    } catch (IOException e) {
        LoggingUtils.error("error... ", e);
    }

    final FileInputStream input = new FileInputStream(outputFile);
    final String fileName = FILE_NAME.concat(FILE_EXTENSION);
    return new MockMultipartFile(fileName,
            fileName, CONTENT_TYPE, IOUtils.toByteArray(input));
}

注意事项

  • 样式必须全局预定义,不要在循环写数据时反复创建,避免触发POI的样式数量上限报错
  • 可按需调整INDENTION_NUM缩进值、PRICE_COLUMN_INDEX价格列索引适配业务需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:18:00