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

使用Java Mail发送ByteArray生成的Excel附件为空问题排查

问题解决:Javax Mail发送生成的Excel附件为空

导致附件内容为空的核心原因是DeferredSXSSFWorkbook的延迟写入特性未被正确触发,以及可能的格式不匹配问题,以下是具体修正步骤:

1. 修正Excel生成代码,确保内容完全写入流

DeferredSXSSFWorkbook是POI针对大数据量的延迟写入实现,仅调用workbook.write(fileOut)无法保证所有内容都被输出,必须手动关闭workbook触发最终写入,同时清理临时资源:

public ByteArrayOutputStream buildexcelreport(){
    DeferredSXSSFWorkbook workbook = new DeferredSXSSFWorkbook();
    DeferredSXSSFSheet sheet = workbook.createSheet("test");
    /* 构建Excel的代码:务必确认这里创建了行、单元格并写入实际内容 */
    
    ByteArrayOutputStream fileOut = new ByteArrayOutputStream();
    try {
        workbook.write(fileOut);
        // 关键步骤:关闭workbook,触发所有延迟内容写入流
        workbook.close();
        fileOut.flush();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        // 清理DeferredSXSSFWorkbook的临时文件
        workbook.dispose();
    }
    return fileOut;
}

2. 修正邮件附件的MIME类型与文件扩展名

DeferredSXSSFWorkbook生成的是Office Open XML格式的Excel(.xlsx),而非旧版的二进制格式(.xls),因此需要匹配正确的MIME类型和文件名:

public boolean sendMail(ByteArrayOutputStream fileout) throws IOException {
    // 构建邮件的其他代码
    
    MimeBodyPart attachmentPart = new MimeBodyPart();
    // 替换为xlsx对应的MIME类型
    ByteArrayDataSource ds = new ByteArrayDataSource(fileout.toByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    attachmentPart.setDataHandler(new DataHandler(ds));
    // 文件名改为.xlsx
    attachmentPart.setFileName("Report.xlsx");
    
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);
    multipart.addBodyPart(attachmentPart);
    message.setContent(multipart);
    Transport.send(message);
    return true;
}

3. 额外检查项

  • 确认/* 构建Excel的代码 */部分确实创建了Row和Cell并设置了有效值,比如:
    DeferredSXSSFRow row = sheet.createRow(0);
    DeferredSXSSFCell cell = row.createCell(0);
    cell.setCellValue("测试内容");
    
  • 如果仍有问题,可在build方法返回前,通过fileOut.size()检查流的字节数,若为0则说明Excel生成逻辑存在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:15:39