填充模板 导出Excel时合并单元格时 写模板语法的行数据获取不到
问题描述
后面合并都没有问题 是不是因为第一行写的是模板语法才导致获取不到{.index}
导出代码
// 调用合并单元格工具类,此工具类是根据工程名称相同则合并后面数据
ExcelMergeUtil excelFillCellMergeStrategy = new ExcelMergeUtil(mergeColumnIndex, mergeRowIndex);
InputStream templateInputStream = ExcelMergeUtil.class.getClassLoader().getResourceAsStream(templatePath);
try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(templateInputStream).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet()
.registerWriteHandler(excelFillCellMergeStrategy)
.build();
// 直接写入数据
excelWriter.fill(list, writeSheet);
}
合并单元格 关键代码
/**
* 当前单元格向上合并
*
* @param writeSheetHolder /
* @param cell 当前单元格
* @param curRowIndex 当前行
* @param curColIndex 当前列
*/
private void mergeWithPrevRow(WriteSheetHolder writeSheetHolder, Cell cell, int curRowIndex, int curColIndex) {
Object curData = cell.getCellType() == CellType.STRING ? cell.getStringCellValue() : cell.getNumericCellValue();
if (cell.getSheet().getRow(curRowIndex - 1) == null) {
//这里取不到数据 也就是第一行写模板语法的数据
// throw new BusinessException("获取上一行数据为null");
return;
}
Cell preCell = cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex);
Object preData = preCell.getCellType() == CellType.STRING ? preCell.getStringCellValue() : preCell.getNumericCellValue();
// 将当前单元格数据与上一个单元格数据比较
Boolean dataBool = preData.equals(curData);
Boolean bool = cell.getRow().getCell(curColIndex).getStringCellValue().equals(cell.getSheet().getRow(curRowIndex - 1).getCell(curColIndex).getStringCellValue());
if (dataBool && bool) {
Sheet sheet = writeSheetHolder.getSheet();
List<CellRangeAddress> mergeRegions = sheet.getMergedRegions();
boolean isMerged = false;
for (int i = 0; i < mergeRegions.size() && !isMerged; i++) {
CellRangeAddress cellRangeAddr = mergeRegions.get(i);
// 若上一个单元格已经被合并,则先移出原有的合并单元,再重新添加合并单元
if (cellRangeAddr.isInRange(curRowIndex - 1, curColIndex)) {
sheet.removeMergedRegion(i);
cellRangeAddr.setLastRow(curRowIndex);
sheet.addMergedRegion(cellRangeAddr);
isMerged = true;
}
}
// 若上一个单元格未被合并,则新增合并单元
if (!isMerged) {
CellRangeAddress cellRangeAddress = new CellRangeAddress(curRowIndex - 1, curRowIndex, curColIndex, curColIndex);
sheet.addMergedRegion(cellRangeAddress);
}
}
}
有没有大佬知道 这是bug还是写法有问题
1条答案
按热度按时间iqih9akk1#
我不通过模板,而是直接生成Excel 没有这样的问题