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

Apache POI循环复制XWPFTableRow时如何避免行数据重复

问题根因

代码中copiedRow对象的创建逻辑放在了循环外部,整个遍历过程中始终在修改同一个XWPFTableRow实例,调用addRow添加到表格时传入的都是同一个对象的引用,最终所有新增行都会展示最后一次循环给对象赋的值,因此出现全量数据重复的问题。

修复代码

将行复制的逻辑移动到循环内部,每次遍历都基于模板行生成独立的新行实例,赋值后再添加到表格即可:

XWPFTable TableArr1 = document.getTableArray(1);
// 仅获取模板行,不提前复制生成待插入的行对象
XWPFTableRow templateRow = TableArr1.getRow(0);

for (AuditEngagementLHA l : ListDivAndDivHead) {
    // 每次循环都复制出独立的新行实例,和其他行互不影响
    XWPFTableRow copiedRow = new XWPFTableRow((CTRow) templateRow.getCtRow().copy(), TableArr1);
    copiedRow.getCell(2).setText(l.getDivisionName().trim());
    copiedRow.getCell(3).setText(l.getNameDisplay().trim());
    TableArr1.addRow(copiedRow);
}
补充说明
  • 循环内复制行的方式不会丢失模板行预设的样式、固定列内容,和预期展示效果完全匹配
  • 原代码中声明的indexCounter变量无实际调用逻辑,属于冗余代码,可直接删除
  • 若需要指定新增行的插入位置,可以调用addRow(XWPFTableRow row, int pos)重载方法,传入目标位置索引即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:57:10