制作网站技术,公司做网站需要什么条件,wordpress英文换成中文,某网站做参考文献的书写折叠组是什么#xff1f;如图就是用POI 实现的#xff0c;代码很简单#xff1a;sheet.groupRow(开始行#xff0c;结束行)即可 但是万万没想到#xff0c;最终实现出的结果#xff0c;合并的组#xff0c;有一部分并没有渲染出来#xff0c;如下图#xff1a; 因为我…折叠组是什么如图就是用POI 实现的代码很简单sheet.groupRow(开始行结束行)即可 但是万万没想到最终实现出的结果合并的组有一部分并没有渲染出来如下图 因为我的合并数据是结合着数据逻辑的特殊动态计算出来的一直认为是我算法的问题或者是数据的问题 这是我的算法
合并组调用ListListInteger groupRows setGroupRowE(startIndex,dataB);for(int i0; igroupRows.size(); i) {sheet.groupRow(groupRows.get(i).get(0),groupRows.get(i).get(1));}
/*** 根据数据规则动态计算分组下标* param startIndex* param data* return*/private ListListInteger setGroupRowE(int startIndex,ListMapString, Object data) {ListListInteger groupRowAll new ArrayList();ListListInteger groupRow2 new ArrayList();MapString,ListInteger cache new LinkedHashMap();int finalStartIndex startIndex;for(int i 0; i data.size(); i) {if(Constant.SYMBOL.equals(data.get(i).get(Constant.SEC_TYPE1))){// 第一级int finalI i;int firstRow0 groupRowAll.size() 0 ? finalStartIndex : (int)groupRowAll.get(groupRowAll.size()-1).get(1)1;ListMapString, Object finalData1 data;int count (int) data.stream().filter((item)- finalData1.get(finalI).get(Constant.RULE_TYPE).equals(item.get(Constant.RULE_TYPE)) !Constant.SYMBOL.equals(item.get(Constant.SEC_TYPE1))).collect(Collectors.toList()).size();ListInteger group1 new ArrayList();if (count 0) {group1 Arrays.asList(firstRow0,firstRow0);groupRow2 new ArrayList();System.out.println(--- data.get(finalI).get(Constant.RULE_TYPE).toString() --- group1);cache.put(data.get(finalI).get(Constant.RULE_TYPE).toString(), group1);groupRowAll.add(group1);} else {group1 Arrays.asList(firstRow0 1,firstRow0 count);cache.put(data.get(finalI).get(Constant.RULE_TYPE).toString(), group1);System.out.println(--- data.get(finalI).get(Constant.RULE_TYPE).toString() --- group1);groupRow2 new ArrayList();groupRowAll.add(group1);}}if(Constant.SYMBOL.equals(data.get(i).get(Constant.SEC_TYPE))){// 第二级int finalI i;int firstRow0 groupRow2.size() 0 ? cache.get(data.get(finalI).get(Constant.RULE_TYPE).toString()).get(0) : (int)groupRow2.get(groupRow2.size()-1).get(1)1;ListMapString, Object finalData data;int count (int) data.stream().filter((item)- finalData.get(finalI).get(Constant.RULE_TYPE).equals(item.get(Constant.RULE_TYPE)) finalData.get(finalI).get(Constant.SEC_TYPE1).equals(item.get(Constant.SEC_TYPE1)) !Constant.SYMBOL.equals(item.get(Constant.SEC_TYPE))).collect(Collectors.toList()).size();ListInteger group1 Arrays.asList(firstRow0 1,firstRow0 count);System.out.println(-------- group1);groupRow2.add(group1);groupRowAll.add(group1);}}System.out.println(groupRowAll);return groupRowAll;}经过反复调试和数据比对数据应该没问题针对计算出来的合并组行和Excel的行进行比对没有发现任何问题现在很大程度上认为是POI的BUG。
问题解决
还好没有放弃通过百度和翻阅资料找到了唯一的一篇文章https://www.5axxw.com/questions/content/u1sln7 里面的问题和我的问题一样解决点来说就是在最初创建workbook对象我new 的是SXSSFWorkbook对象应该用XSSFWorkbook对象那么他俩到底啥区别呢 也就是我们用流操作workbook在操作时获取的不是一个完整的Workbook对象它是为了防止内存溢出知道这一点只需要将SxssFWorkbook 改为XSSFWorkbookSheet 改为XSSFSheet 即可其余不变 执行导出结果