EasyExcel填充时合并单元格

由于填充时第二行开始,easyexcel不会自动合并单元格,所以需要自定义handler根据上一行的合并信息自行合并

public class MyHandler extends AbstractMergeStrategy {
	

	@Override
	protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
		if(relativeRowIndex==null ||relativeRowIndex==0){			
			return;
		}		
		int rowIndex = cell.getRowIndex(); 
		int colIndex = cell.getColumnIndex();
		sheet=cell.getSheet();
		Row preRow = sheet.getRow(rowIndex - 1);
		Cell preCell = preRow.getCell(colIndex);//获取上一行的该格
		List<CellRangeAddress> list = sheet.getMergedRegions();
		CellStyle cs = cell.getCellStyle();
		cell.setCellStyle(cs);
		for (int i = 0; i < list.size(); i++) {
            CellRangeAddress cellRangeAddress = list.get(i);
            if (cellRangeAddress.containsRow(preCell.getRowIndex()) && cellRangeAddress.containsColumn(preCell.getColumnIndex())) {
            	int lastColIndex = cellRangeAddress.getLastColumn();
            	int firstColIndex = cellRangeAddress.getFirstColumn();
            	CellRangeAddress cra = new CellRangeAddress(cell.getRowIndex(), cell.getRowIndex(), firstColIndex, lastColIndex);
                sheet.addMergedRegion(cra);
                RegionUtil.setBorderBottom(BorderStyle.THIN, cra, sheet); 
                RegionUtil.setBorderLeft(BorderStyle.THIN, cra, sheet);  
                RegionUtil.setBorderRight(BorderStyle.THIN, cra, sheet); 
                RegionUtil.setBorderTop(BorderStyle.THIN, cra, sheet);
                return;
            }
        }

	}

}

调用:

ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(Objects.requireNonNull(DeviceController.class.getClassLoader().getResourceAsStream("/excel/devmsg.xlsx"))).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
WriteSheet writeSheet1 = EasyExcel.writerSheet().registerWriteHandler(new MyHandler()).build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();      
excelWriter.fill(bm, writeSheet1);//写入设备基础信息
excelWriter.fill(new FillWrapper("data1", list), fillConfig, writeSheet1);
excelWriter.fill(new FillWrapper("data2", list1), fillConfig, writeSheet1);
excelWriter.fill(new FillWrapper("data3", list2), fillConfig, writeSheet1);
excelWriter.fill(new FillWrapper("data4", list3), fillConfig, writeSheet1);
excelWriter.finish();
对于EasyExcel填充操作,您可以使用`FillPatternType`枚举来指定单元填充样式。以下是一个示例代码,演示如何在EasyExcel中进行填充: ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.IndexedColors; public class EasyExcelFillExample { public static void main(String[] args) { String fileName = "test.xlsx"; // 创建数据集合 List<YourDataClass> data = new ArrayList<>(); // 添加数据到集合... // 单元样式 CellStyle cellStyle = new CellStyle(); cellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND); cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); // 创建策略并设置样式 WriteCellStyle style = new WriteCellStyle(); style.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); style.setFillPatternType(FillPatternType.SOLID_FOREGROUND); HorizontalCellStyleStrategy styleStrategy = new HorizontalCellStyleStrategy(style); // 写入Excel文件 EasyExcel.write(fileName, YourDataClass.class) .registerWriteHandler(styleStrategy) .sheet("Sheet1") .doWrite(data); } } ``` 上述代码中,我们使用`FillPatternType.SOLID_FOREGROUND`指定了单元填充样式,并使用`IndexedColors.YELLOW.getIndex()`设置了填充颜色为黄色。 您可以根据自己的需求修改代码中的数据集合和样式,以实现您想要的填充效果。希望对您有帮助!
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值