package com.ltsk.whcg.test;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class Test {
@RequestMapping("test55")
public String demo(HttpServletResponse response) {
try {
XSSFWorkbook book = new XSSFWorkbook();
List<Map<String, Object>> czjl_tj = new ArrayList<>();
for (int i = 0; i < 100; i++) {
HashMap<String, Object> map = new HashMap<>();
map.put("AREA", "111");
map.put("TRANSPORTUNIT", "111");
map.put("CARNO", "111");
map.put("COUNT", "111");
map.put("SUM", "111");
czjl_tj.add(map);
}
String[] title = {"行政区", "运输单位", "车牌号", "车数", "垃圾量(吨)"};
int mus = 100;
int total = czjl_tj.size();
int page = total / mus;
int left = total%mus;
if(left!=0){
page += 1;
}
XSSFSheet sheet = null;
for (int i = 0; i < page; i++) {
sheet = book.createSheet("第" + (i + 1) + "页");
XSSFRow row = sheet.createRow(0);
int headInt = 0;
for (String t : title) {
row.createCell(headInt++).setCellValue(t);
}
int num = i * mus;
int index = 0;
int rowInt = 1;
for (int m = num; m < czjl_tj.size(); m++) {
if (index == mus) {// 判断index == mus的时候跳出当前for循环
break;
}
row = sheet.createRow(rowInt++); // 创建行
Map<String, Object> map = czjl_tj.get(m);
row.createCell(0).setCellValue(map.get("AREA").toString());
row.createCell(1).setCellValue(map.get("TRANSPORTUNIT").toString());
row.createCell(2).setCellValue(map.get("CARNO").toString());
row.createCell(3).setCellValue(map.get("COUNT").toString());
row.createCell(4).setCellValue(map.get("SUM").toString());
index++;
}
// 合并单元格
excel(sheet, 0);
excel(sheet, 1);
}
response.setContentType("application/vnd.ms-excel;charset=utf-8");
OutputStream os = response.getOutputStream();
response.setHeader("Content-disposition", "attachment;filename=test.xls");//默认Excel名称
book.write(os);
} catch (Exception e) {
e.printStackTrace();
}
return "success!";
}
// 合并相同内容的行
public static void excel(XSSFSheet sheet, int cell) {
int start = 1;
for (int j = 0; j < sheet.getLastRowNum() - 1; j++) {
String value = sheet.getRow(j + 1).getCell(cell).getStringCellValue();
String value2 = sheet.getRow(j + 2).getCell(cell).getStringCellValue();
if (!value.equals(value2)) {
if (start != j + 1)
sheet.addMergedRegion(new CellRangeAddress(start, j + 1, cell, cell));
start = j + 2;
}
if (value.equals(sheet.getRow(sheet.getLastRowNum()).getCell(cell).getStringCellValue())) {
if (start != sheet.getLastRowNum())
sheet.addMergedRegion(new CellRangeAddress(start, sheet.getLastRowNum(), cell, cell));
break;
}
}
}
}
结果
合并纵向单元格