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

使用Apache POI导出数据库数据到Excel仅显示表头问题求助

问题分析与解决方案

你的Excel文件只显示列标题却没有数据,核心问题是没有正确遍历results中的数据并映射到Excel的行和列。当前代码把整个Map对象作为单个单元格值写入,Excel无法解析这个对象,所以看起来没有数据。

具体错误点

你在这段代码里犯了关键错误:

data.put("2", new Object[] { results});

你把整个results Map作为一个元素放进了数组,这会导致第二行只有第一个单元格存储了一个Map对象,而不是把Map里的每个条目拆分成对应标题列的行数据,自然无法正常显示内容。

修复步骤

假设你的results Map结构是键为ID,值是用分隔符(比如逗号)拼接的PREV COUNT、CURRENT COUNT、STAGING数据(如果实际结构不同,你可以对应调整拆分逻辑),以下是修改后的完整代码:

public static void writeExcelSheetForCountByCategories(Map<String, String> results) {
    // Blank workbook
    @SuppressWarnings("resource")
    XSSFWorkbook workbook = new XSSFWorkbook();
    // Create a blank sheet
    XSSFSheet sheet = workbook.createSheet("Count_sheet");
    
    // 1. 单独写入标题行,逻辑更清晰
    Row headerRow = sheet.createRow(0);
    String[] headers = {"ID", "PREV COUNT", "CURRENT COUNT", "STAGING"};
    for (int i = 0; i < headers.length; i++) {
        Cell cell = headerRow.createCell(i);
        cell.setCellValue(headers[i]);
    }
    
    // 2. 遍历results的每个条目,逐行写入数据
    int rownum = 1; // 从第二行开始写入数据行
    for (Map.Entry<String, String> entry : results.entrySet()) {
        Row row = sheet.createRow(rownum++);
        String id = entry.getKey();
        // 按逗号拆分值,得到三个字段的数据(如果你的分隔符不是逗号,替换成实际的即可)
        String[] values = entry.getValue().split(",");
        
        // 写入ID列
        row.createCell(0).setCellValue(id);
        // 写入其他列,添加长度判断避免数组越界
        if (values.length >= 1) row.createCell(1).setCellValue(values[0].trim());
        if (values.length >= 2) row.createCell(2).setCellValue(values[1].trim());
        if (values.length >= 3) row.createCell(3).setCellValue(values[2].trim());
    }
    
    try {
        // 写入文件到磁盘
        FileOutputStream out = new FileOutputStream(new File("Counts2.xlsx"));
        workbook.write(out);
        out.close();
        LOG.debug("Counts2.xlsx written successfully on disk.");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

关键调整说明

  • 拆分了标题行和数据行的写入逻辑,更易维护。
  • 遍历results的每个Entry,为每个条目创建独立的Excel行。
  • 添加了数组越界判断,避免因数据格式不规范导致运行时异常。
  • 如果你的results值不是逗号分隔的字符串(比如是自定义对象),只需要修改值的解析逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:17:03