excel导出,多列合并表头
1、maven依赖:
<easypoi-version>3.2.0</easypoi-version><!-- easypoi-->
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>${easypoi-version}</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>${easypoi-version}</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>${easypoi-version}</version>
</dependency>
2、定制表头:
public List<ExcelExportEntity> exportEnergyDetailDefineHead() {List<ExcelExportEntity> colList = new ArrayList<>();// 单个表头
ExcelExportEntity entity0 = new ExcelExportEntity("月份", "financialDate");
entity0.setOrderNum(0);
entity0.setWidth(20);
colList.add(entity0);ExcelExportEntity entity1 = new ExcelExportEntity("费项", "feeName");
entity1.setOrderNum(1);
entity1.setWidth(20);
colList.add(entity1);// 合并表头
String groupName1 = "自用用量";
ExcelExportEntity selfUseDosage1 = new ExcelExportEntity("尖", "selfUseDosage1");
selfUseDosage1.setOrderNum(2);
selfUseDosage1.setWidth(10);
selfUseDosage1.setGroupName(groupName1);
colList.add(selfUseDosage1);ExcelExportEntity selfUseDosage2 = new ExcelExportEntity("峰", "selfUseDosage2");
selfUseDosage2.setOrderNum(3);
selfUseDosage2.setWidth(10);
selfUseDosage2.setGroupName(groupName1);
colList.add(selfUseDosage2);ExcelExportEntity selfUseDosage3 = new ExcelExportEntity("平", "selfUseDosage3");
selfUseDosage3.setOrderNum(4);
selfUseDosage3.setWidth(10);
selfUseDosage3.setGroupName(groupName1);
colList.add(selfUseDosage3);ExcelExportEntity selfUseDosage4 = new ExcelExportEntity("谷", "selfUseDosage4");
selfUseDosage4.setOrderNum(5);
selfUseDosage4.setWidth(10);
selfUseDosage4.setGroupName(groupName1);
colList.add(selfUseDosage4);return colList;
}
3、导出方法:
@ApiOperation(value = "能耗-导出能耗明细")
@ApiResponse(code = 200, message = "返回结果")
@RequestMapping(value = "/finance/finEnergyBill/exportEnergyDetail", method = RequestMethod.POST)
public void exportEnergyDetail(@RequestBody FinEnergyBillSearchDto dto, HttpServletResponse response) {// 添加用户拥有的项目权限集合dto.setProjectAuthIdList(basProjectService.getAuthProjectIds());// 查询数据List<Map<String, Object>> exportList = finInvoiceBillClient.exportEnergyDetail(dto).getResult();// 设置表头List<ExcelExportEntity> colList = finEnergyBillService.exportEnergyDetailDefineHead();// 文件名String fileName = "能耗明细" + DateUtils.parseDateToStr("yyyyMMddHHmmss", new Date());// 生成excelExcelUtil.generateExcelActiveHead(response, exportList, colList, fileName, "能耗明细");}
4、excel工具类:
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;/*** 导出excel 工具类.*/
@Slf4j
public class ExcelUtil {/*** 生成excel** @param response* @param list 导出的数据* @param clazz list 中对应的泛型* @param fileName 导出的文件名*/public static void generateExcel(HttpServletResponse response, List<? extends Object> list, Class clazz, StringfileName, String sheetName) {log.info("======method:generateExcel list:{},", JSON.toJSONString(list));//生成Excel文件ExportParams exportParams = new ExportParams();exportParams.setStyle(ExcelExportStyler.class);Workbook workbook = ExcelExportUtil.exportExcel(exportParams, clazz, list);workbook.setSheetName(0, sheetName);response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");//通过输出流输出文件try {String fileName2 = URLEncoder.encode(fileName, "utf-8").replaceAll("\\+", "%20");response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName2 + ".xls");ServletOutputStream out = response.getOutputStream();workbook.write(out);out.flush();out.close();} catch (UnsupportedEncodingException e) {log.error("======method:generateExcel exception:", e);} catch (IOException e) {log.error("======method:generateExcel exception:", e);}}/*** 生成excel (动态标题)** @param response* @param list 导出的数据* @param headList excel 标题* @param fileName 导出的文件名*/public static void generateExcelActiveHead(HttpServletResponse response, List<? extends Object> list,List<ExcelExportEntity> headList, String fileName, String sheetName) {log.info("======method:generateExcelActiveHead list:{},", JSON.toJSONString(list));//生成Excel文件ExportParams exportParams = new ExportParams();exportParams.setStyle(ExcelExportStyler.class);Workbook workbook = ExcelExportUtil.exportExcel(exportParams, headList, list);workbook.setSheetName(0, sheetName);response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");//通过输出流输出文件try {String fileName2 = URLEncoder.encode(fileName, "utf-8").replaceAll("\\+", "%20");response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName2 + ".xls");// response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8")// +".xls");ServletOutputStream out = response.getOutputStream();workbook.write(out);out.flush();out.close();} catch (UnsupportedEncodingException e) {log.error("======method:generateExcelActiveHead exception:", e);} catch (IOException e) {log.error("======method:generateExcelActiveHead exception:", e);}}
}