一对多 EasyExcel复杂表头导出升级版( 二 )

> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {// 获取当前单元格行下标int currRowIndex = cell.getRowIndex();// 获取当前单元格列下标int currColIndex = cell.getColumnIndex();// 判断是否大于指定行下标,如果大于则判断列是否也在指定的需要的合并单元列集合中if (currRowIndex > mergeRowIndex) {for (int i = 0; i < mergeColIndex.length; i++) {if (currColIndex == mergeColIndex[i]) {/*** 获取列表数据的唯一标识 。不同集合的数据即使数值相同也不合并* 注意:我这里的唯一标识为客户编号(Customer.userCode),在第一列,即下标为0 。大家需要结合业务逻辑来做修改*/// 获取当前单元格所在的行数据的唯一标识Object currCode = cell.getRow().getCell(0).getStringCellValue();// 获取当前单元格的正上方的单元格所在的行数据的唯一标识Object preCode = cell.getSheet().getRow(currRowIndex - 1).getCell(0).getStringCellValue();// 判断两条数据的是否是同一集合,只有同一集合的数据才能合并单元格if(preCode.equals(currCode)){// 如果都符合条件,则向上合并单元格mergeWithPrevRow(writeSheetHolder, cell, currRowIndex, currColIndex);break;}}}}}/*** 当前单元格向上合并** @param writeSheetHolder 表格处理句柄* @param cell当前单元格* @param currRowIndex当前行* @param currColIndex当前列*/private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int currRowIndex, int currColIndex) {// 获取当前单元格数值Object currData = http://www.kingceram.com/post/cell.getCellTypeEnum() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue();// 获取当前单元格正上方的单元格对象Cell preCell = cell.getSheet().getRow(currRowIndex - 1).getCell(currColIndex);// 获取当前单元格正上方的单元格的数值Object preData = preCell.getCellTypeEnum() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();// 将当前单元格数值与其正上方单元格的数值比较if (preData.equals(currData)) {Sheet sheet = writeSheetHolder.getSheet();List mergeRegions = sheet.getMergedRegions();// 当前单元格的正上方单元格是否是已合并单元格boolean isMerged = false;for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {CellRangeAddress address = mergeRegions.get(i);// 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元if (address.isInRange(currRowIndex - 1, currColIndex)) {sheet.removeMergedRegion(i);address.setLastRow(currRowIndex);sheet.addMergedRegion(address);isMerged = true;}}// 若上一个单元格未被合并,则新增合并单元if (!isMerged) {CellRangeAddress cellRangeAddress = new CellRangeAddress(currRowIndex - 1, currRowIndex, currColIndex, currColIndex);sheet.addMergedRegion(cellRangeAddress);}}}}
2.方法(用于模拟层拿到的数据)
public static List getData() throws Exception {List data = http://www.kingceram.com/post/new ArrayList<>();Customer customer = new Customer("JiangXi", "江西电信公司", "江西省南昌市东湖区", "张三", "12345678910", new URL("https://m.360buyimg.com/babel/jfs/t1/221733/11/14107/61280/62fde84dE467522ce/79bbd42aa93f5a83.jpg"));data.add(customer);Customer customer2 = new Customer("JiangXi", "江西电信公司", "江西省南昌市东湖区", "李四", "15848563521", new URL("https://m.360buyimg.com/babel/jfs/t1/221733/11/14107/61280/62fde84dE467522ce/79bbd42aa93f5a83.jpg"));data.add(customer2);Customer customer3 = new Customer("GuangDong", "广东电信公司", "广东省广州市花都区", "小明", "15847953624", new URL("https://m.360buyimg.com/babel/jfs/t1/215924/36/19623/23344/62baa985E4df523c6/4893237860b306d6.jpg"));data.add(customer3);Customer customer4 = new Customer("GuangDong", "广东电信公司", "广东省广州市天河区", "小红", "16849531548", new URL("https://m.360buyimg.com/babel/jfs/t1/189640/15/26493/35837/62baa97eE6abda209/461f91e682d0e81a.jpg"));data.add(customer4);Customer customer5 = new Customer("GuangDong", "广东电信公司", "广东省广州市天河区", "小华", "16985632481", new URL("https://m.360buyimg.com/babel/jfs/t1/189640/15/26493/35837/62baa97eE6abda209/461f91e682d0e81a.jpg"));data.add(customer5);Customer customer6 = new Customer("BeiJing", "北京电信公司", "北京市东城区", "姜维", "16598645874", new URL("https://m.360buyimg.com/babel/jfs/t1/31481/11/16081/24873/62baa97dE6f3991d0/94ae13d66b9bbfdd.jpg"));data.add(customer6);return data;}