• 利用easy poi做文件导出


    一、引入必要依赖

    与spring boot集成

    1. cn.afterturn
    2. easypoi-spring-boot-starter
    3. 4.3.0

    不与spring boot 集成

    1. cn.afterturn
    2. easypoi-base
    3. 3.2.0
    4. cn.afterturn
    5. easypoi-web
    6. 3.2.0
    7. cn.afterturn
    8. easypoi-annotation
    9. 3.2.0
    10. org.hibernate
    11. hibernate-validator
    12. 5.3.6.Final

    二、创建映射类

    1. @Data
    2. public class PatrolProcessDTO {
    3. @Excel(name = "设备名称", orderNum = "0", width = 20, mergeVertical = true)
    4. private String orderNum;
    5. @Excel(name = "工单名称", orderNum = "1", width = 20, mergeVertical = true)
    6. private String workOrderName;
    7. @Excel(name = "巡检路线", orderNum = "2", width = 20, mergeVertical = true)
    8. private String patrolRoute;
    9. @Excel(name = "维修技师", orderNum = "3", width = 20, mergeVertical = true)
    10. private String maintenanceUserName;
    11. @Excel(name = "打点情况", orderNum = "4", width = 20, mergeVertical = false)
    12. private String content;
    13. @Excel(name = "处理结果(工单状态)", orderNum = "5", width = 20, mergeVertical = true)
    14. private String workOrderSolveStatusName;
    15. @Excel(name = "维修技师处理时长", orderNum = "6", width = 20, mergeVertical = true)
    16. private String maintenanceTime;
    17. @Excel(name = "维修班长确认时长", orderNum = "7", width = 20, mergeVertical = true)
    18. private String confirmTime;
    19. @Excel(name = "总用时", orderNum = "8", width = 20, mergeVertical = true)
    20. private String workOrderSpendTime;
    21. }
    22. //mergeVertical 为true 代表遇相同相邻上下文合并

    三、创建设置样式方法

    1. private void setColor(Sheet sheetAt, List list, Workbook workbook) {
    2. if (!CollectionUtils.isEmpty(list)) {
    3. for (Integer rowIndex : list) {
    4. Row row = sheetAt.getRow(rowIndex);
    5. if (ObjectUtil.isNull(row)) {
    6. continue;
    7. }
    8. //获取单元格对象
    9. Cell cell2 = row.getCell(4);
    10. //获取单元格样式对象
    11. CellStyle cellStyle = workbook.createCellStyle();
    12. //获取单元格内容对象
    13. Font font = workbook.createFont();
    14. //一定要装入 样式中才会生效
    15. cellStyle.setFont(font);
    16. //获取当前单元格中的value
    17. if (ObjectUtil.isNull(cell2)) {
    18. continue;
    19. }
    20. String value = sheetAt.getRow(rowIndex).getCell(4).toString();
    21. if (StringUtils.isNotBlank(value) && value.contains("未打卡")) {
    22. cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
    23. cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    24. }
    25. cell2.setCellStyle(cellStyle);
    26. }
    27. }
    28. }

    四、导出实现

    1. List allContentList = new ArrayList<>();
    2. //根据时间获取工单
    3. List patrolProcessExportDTOList = analysisPatrolProcessExportInfo.analyzeExportProcessInfo(new ExportWorkOrderInfoDTO(startTime, endTime));
    4. List rowIndexList = new LinkedList<>();
    5. if (!CollectionUtils.isEmpty(patrolProcessExportDTOList)) {
    6. int i = 1;
    7. for (PatrolProcessExportDTO patrolProcessExportDTO : patrolProcessExportDTOList) {
    8. Map>> nfcMap = patrolProcessExportDTO.getNfcMap();
    9. if (!CollectionUtils.isEmpty(nfcMap)) {
    10. int finalI = i;
    11. nfcMap.forEach((k, v) -> {
    12. PatrolProcessDTO patrolProcessDTO = new PatrolProcessDTO();
    13. BeanUtils.copyProperties(patrolProcessExportDTO, patrolProcessDTO);
    14. patrolProcessDTO.setOrderNum(finalI + "");
    15. //设置打卡点情况
    16. if (v.size() == 0) {
    17. patrolProcessDTO.setContent(k + "未打卡");
    18. rowIndexList.add(allContentList.size());
    19. } else {
    20. patrolProcessDTO.setContent(getNfcInfo(v, k));
    21. }
    22. allContentList.add(patrolProcessDTO);
    23. });
    24. } else {
    25. PatrolProcessDTO patrolProcessDTO = new PatrolProcessDTO();
    26. BeanUtils.copyProperties(patrolProcessExportDTO, patrolProcessDTO);
    27. patrolProcessDTO.setOrderNum(i + "");
    28. allContentList.add(patrolProcessDTO);
    29. }
    30. i++;
    31. }
    32. }
    33. //向会话写入
    34. try {
    35. response.setContentType("application/vnd.ms-excel");
    36. response.setCharacterEncoding("utf-8");
    37. String fileName = URLEncoder.encode("巡检工单", "UTF-8");
    38. response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
    39. //设置sheet页名称
    40. ExportParams exportParams = new ExportParams();
    41. exportParams.setSheetName("巡检工单数据");
    42. Workbook workbook = ExcelExportUtil.exportExcel(exportParams, PatrolProcessDTO.class, allContentList);
    43. //设置单元格样式
    44. Sheet sheetAt = workbook.getSheetAt(0);
    45. setColor(sheetAt, rowIndexList, workbook);
    46. workbook.write(response.getOutputStream());
    47. } catch (Exception e) {
    48. log.error("导出出错-{}", ExceptionUtils.getStackTrace(e));
    49. renderString(response, JSON.toJSONString(new ResultInfo().error(SystemError.SYS_10055)));
    50. }
    51. }

  • 相关阅读:
    Web 应用分析
    金融行业容器平台建设方案
    中软国际:战略携手三大伙伴,三线出击收割AI红利
    【开源WebGIS】05-Openlayers访问GeoServer发布的WMS数据并添加标注
    Python里引用了time包后,不能再命名time变量了吗?
    【已解决】Operation timed out 问题
    CentOS中的rename命令
    Android入门第10天-Android访问远程Spring Boot提供的Restful API接口
    UWB系统的定位精度影响因素(一)
    解决Jackson解析JSON时出现的Illegal Character错误
  • 原文地址:https://blog.csdn.net/weixin_44705744/article/details/133669853