需求:导出每个人发表的文章的被点赞次数,不用导出没点赞的
数据查出来的 list 是这样的
发表文章的人的ID | 发表文章的人-USER_NAME | 文章-TITLE | 点赞次数-NUM |
---|---|---|---|
CREATEID1 | NAME1 | TITLE1 | 0 |
CREATEID2 | NAME2 | TITLE2 | 1 |
CREATEID2 | NAME4 | TITLE2 | 2 |
CREATEID1 | NAME3 | TITLE3 | 1 |
看这数据就是要把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;
导出数据如下: