java 使用poi生成Excel ,合并单元格

需求:导出每个人发表的文章的被点赞次数,不用导出没点赞的

数据查出来的 list 是这样的

发表文章的人的ID发表文章的人-USER_NAME文章-TITLE点赞次数-NUM
CREATEID1NAME1TITLE10
CREATEID2NAME2TITLE21
CREATEID2NAME4TITLE22
CREATEID1NAME3TITLE31

看这数据就是要把CREATEID相同的单元格合并。

@Service 层
// 数据重组

// 根据“发表文章的人的ID”,整合每个人发布的文章
Map<String, List> data = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
	Map<String, Object> temp = list.get(i);
	if(!data.containsKey(temp.get("CREATE_ID")+"")){
		List a = new ArrayList<>();
		a.add(temp);
		data.put(temp.get("CREATE_ID")+"", a );
	}else{
		List b = data.get(temp.get("CREATE_ID")+"");
		b.add(temp);
		data.put(temp.get("CREATE_ID")+"", b);
	}
}

// excel 封装

		HSSFWorkbook workbook = new HSSFWorkbook();

        HSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		style.setBorderBottom((short)1);
		style.setBorderLeft((short)1);
		style.setBorderTop((short)1);
		style.setBorderRight((short)1);
				        
        HSSFSheet sheet = workbook.createSheet("sheet");
        sheet.setColumnWidth(0, 25 * 256);
        sheet.setColumnWidth(1, 60 * 256);

        HSSFRow row0 = sheet.createRow(0);//第0行
        row0.setHeight((short) (2 * 256));
        HSSFCell cell_00 = row0.createCell(0);//第0行第0列
        cell_00.setCellStyle(style);
        cell_00.setCellValue("作者");
        HSSFCell cell_01 = row0.createCell(1);//第0行第1列
        cell_01.setCellStyle(style);
        cell_01.setCellValue("知识点名称");
        HSSFCell cell_02 = row0.createCell(2);//第0行第2列
        cell_02.setCellStyle(style);
        cell_02.setCellValue("点赞数");
        int hang = 1; //第0行放标题了,不参与合并
		for (Entry<String, List> entry : data.entrySet()) {
			List  a = entry.getValue();
			// 记录当前要开始合并的行数
			int count = hang;
			for (int i = 0; i < a.size(); i++) {
				Map b = (Map) a.get(i);
				//每遍历一条数据,行数要+1
				HSSFRow row1 = sheet.createRow(hang++);//第一行
		        HSSFCell cell_10 = row1.createCell(0);//第一行第0列
		        cell_10.setCellStyle(style);
		        cell_10.setCellValue(b.get("USER_NAME")+"");
		        HSSFCell cell_11 = row1.createCell(1);//第一行第1列
		        cell_11.setCellStyle(style);
		        cell_11.setCellValue(b.get("TITLE")+"");
		        HSSFCell cell_12 = row1.createCell(2);//第一行第2列
		        cell_12.setCellStyle(style);
		        cell_12.setCellValue(b.get("NUM")+"");
			}
	        // 合并日期占两行(4个参数,分别为起始行,结束行,起始列,结束列)
	        // 行和列都是从0开始计数,且起始结束都会合并
	        CellRangeAddress region = new CellRangeAddress(count, hang, 0, 0);
	        sheet.addMergedRegion(region);
        }
		return workbook;

导出数据如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值