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

使用Apache POI向Excel写入数据时姓名列被覆盖的问题求助

解决Apache POI写入Excel时姓名被覆盖的问题

你遇到的问题其实是两个小细节没处理到位:一是重复创建同一行导致之前的单元格内容被覆盖,二是可能没有正确调用生成姓名的方法,导致姓名为空。咱们一步步来修正:

问题根源分析

  1. 重复创建行对象:你原来的代码里,每次设置姓名和手机号时都调用了worksheet.createRow(i)——但这个方法如果发现该行已经存在,会直接替换掉原来的行对象!所以第一次设置完姓名单元格后,第二次调用createRow(i)会把之前的行删掉,重新创建一行,这就导致姓名被清空,只剩手机号。
  2. 方法调用错误:如果NameGenerator和PhoneGenerator是DataGenerator类里的方法,你现在写的dg.NameGenerator是在引用方法本身,而不是调用它生成值,这会导致name变量为空(或者编译报错),所以Excel里姓名列显示空白。

修改后的代码

try {
    // 创建Excel文件输出流
    FileOutputStream fileOut = new FileOutputStream("excelfile.xls");
    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet worksheet = workbook.createSheet("Register Data");
    DataGenerator dg = new DataGenerator();

    for (int i = 0; i < 3; i++) {
        // 正确调用方法生成随机姓名和手机号(注意括号!)
        String name = dg.NameGenerator();
        String phone = dg.PhoneGenerator();

        // 先创建一次行并保存到变量,后续操作都用这个变量
        HSSFRow row = worksheet.createRow(i);
        row.createCell(0).setCellValue(name);
        row.createCell(1).setCellValue(phone);
    }

    // 保存并正确释放资源
    workbook.write(fileOut);
    fileOut.flush();
    fileOut.close();
    workbook.close(); // 别忘了关闭workbook,避免资源泄漏
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

关键修改点说明

  • 只创建一次行:先把创建好的行对象存在row变量里,再给该行的两个单元格赋值,这样就不会出现覆盖行的情况了。
  • 正确调用生成方法:给NameGenerator和PhoneGenerator加上括号(),确保每次循环都调用方法生成新的随机姓名和手机号。
  • 补充关闭Workbook:添加workbook.close()来确保Excel相关资源被正确释放,避免潜在的内存泄漏问题。

如果NameGenerator和PhoneGenerator是DataGenerator里的成员变量而不是方法,那你需要确保每次循环时这些变量都会被重新赋值生成新的随机值,不然可能所有行的姓名和手机号都一样哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:07