java导出excel多表,多列合并

qq_22701921 2016-12-01 08:09:00
求教:


说明:A与B两张表导出,关联字段是A表的TASK_SEQ字段,通过左连接,查询到最终的结果对应导出到excel上面。
A表中一个TASK_SEQ,对应B表中的记录不定,当TASK_SEQ相同的时候,导出的数据都是写在一行。在excel的列中进行拼接,分别对应不同的字段。

现在就是没有办法完成,我的想法是写入的时候,判断TASK_SEQ的值,将其放在map中,同时还有它的行数,然后一行结束在写下一行的时候,判断TASK_SEQ是否相同,相同的话,取行数,在对应的行数后面直接拼接,不相同的话put进入map中,写入下一行。


现在的问题是我一旦改变map的值,就是报错了:java.util.ConcurrentModificationException。


	// 循环添加数值
for (int i = 0; i < list.size(); i++) {
Map<String, String> map = list.get(i);

System.out.println("第" + i + "次task_seq" + map.get("TASK_SEQ"));
// 判断TASK_SEQ中是否存在已经有的值
int j = 0;
if (i == 0) {
// 第一次循环,TASK_SEQ不重复
map_seq.put(map.get("TASK_SEQ"), i + 2);
} else {
// 将map集合转换成map_seq
Set<Entry<String, Integer>> set = map_seq.entrySet();

// 进行循环
if (!set.isEmpty()) {

int m = 0;
for (Entry<String, Integer> entry : set) {
String task_sql = entry.getKey();
// 重复的话,取出entry长度值,修改创建的行值
if (map.get("TASK_SEQ").equals(task_sql)) {
j = set.size();

} else {
// 不重复put进去
map_seq.put(map.get("TASK_SEQ"), i + 2);
}
m++;

}
} else {
map_seq.put(map.get("TASK_SEQ"), i + 2);
}

}
// 创建第几行
row = excelWriter.createRow(sheet,j + 2);




求教,有没有会的,搞了两三天了,卡在这一点儿。



...全文
734 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你去搜一下这个错误就明白了,不要边循环边操作,或者是把map换成ConcurrentHashMap这个

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧