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

如何使用Apache POI在Excel工作表页眉中添加图片?

在Apache POI中为Excel页眉添加图片的解决方案

一、Apache POI官方支持的实现方式(针对XSSF格式)

你之前的代码无法生效,是因为Header接口的setRight等方法仅支持文本内容,要添加图片需要借助POI对Excel页眉图片的特殊支持逻辑,步骤如下:

  1. 将图片加载为字节数组并添加到工作簿
    先把目标图片文件读取为字节数组,然后通过XSSFWorkbook.addPicture方法将图片加入工作簿,获取图片索引。
  2. 关联图片到页眉指定位置
    获取XSSFHeader实例,调用addPicture方法将图片关联到页眉的对应位置(左、中、右),同时设置页眉的占位符标记。

修改后的代码示例

private void createOverview(final XSSFWorkbook workbook) throws IOException {
    final Sheet overview = xlsxService.createSheet(messages.format("excel.overview"), workbook);
    // ... 其他业务逻辑

    // 1. 加载图片并添加到工作簿
    byte[] logoBytes = Files.readAllBytes(Paths.get(LOGO_852_X_558_PNG)); // 替换为你的图片路径
    int pictureIndex = workbook.addPicture(logoBytes, Workbook.PICTURE_TYPE_PNG);

    // 2. 获取XSSFHeader并关联图片到右侧位置
    XSSFHeader header = (XSSFHeader) overview.getHeader();
    // 添加图片到页眉右侧,第二个参数指定图片位置:LEFT/CENTER/RIGHT
    header.addPicture(pictureIndex, XSSFHeader.HeaderPicturePosition.RIGHT);
    // 设置页眉右侧的占位符,&G是Excel页眉图片的特殊标记
    header.setRight("&G");

    // 设置页脚(保留原有逻辑)
    final Footer footer = overview.getFooter();
    footer.setCenter("page " + HeaderFooter.page() + " of " + HeaderFooter.numPages());
}

注意事项

  • 确保使用的Apache POI版本在3.17及以上,旧版本可能不支持XSSFHeader.addPicture方法。
  • 图片格式需与addPicture中指定的类型匹配(如PNG对应Workbook.PICTURE_TYPE_PNG)。
  • 页眉的图片会自动适配页眉区域尺寸,若需自定义大小,可预先调整图片原始尺寸或借助POI的图片缩放API处理。

二、针对HSSF格式(.xls)的实现方式(可选)

如果需要兼容旧版Excel格式,HSSF的实现逻辑略有不同:

HSSFHeader header = (HSSFHeader) overview.getHeader();
header.setPicture(pictureIndex, HSSFHeader.PICTURE_RIGHT);
header.setRight("&G");

三、替代方案

如果Apache POI的实现无法满足需求,可考虑以下选项:

  • Aspose.Cells:商业库,对Excel页眉图片的支持更灵活,可直接设置图片路径、大小和位置,但需要付费授权。
  • 使用Excel模板:预先在模板文件中设置好页眉图片,再通过POI加载模板并填充数据,无需编写图片添加逻辑,适合固定格式的报表场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:20:12