使用hutool导出Excel循环表头和数据、自动合并单元格、样式修改

港控/mmm° 2022-11-01 00:58 56阅读 0赞

引入hutool工具包

  1. <dependency>
  2. <groupId>cn.hutool</groupId>
  3. <artifactId>hutool-all</artifactId>
  4. <version>4.5.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.poi</groupId>
  8. <artifactId>poi</artifactId>
  9. <version>4.0.1</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>commons-net</groupId>
  13. <artifactId>commons-net</artifactId>
  14. <version>3.6</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.apache.poi</groupId>
  18. <artifactId>poi-ooxml</artifactId>
  19. <version>4.0.1</version>
  20. </dependency>

部分代码段

  1. public void export(ParamDto data, HttpServletResponse response) {
  2. try (OutputStream out = response.getOutputStream()) {
  3. List<String> taskList = null;
  4. List<Map<String, Object>> list = new ArrayList<>();
  5. List<Map<String, Object>> titleList = new ArrayList<>();
  6. if (StringUtils.isEmpty(data.getTaskName())) {
  7. taskList = getTaskList(data.getDepartment());
  8. }
  9. ExcelWriter writer = ExcelUtil.getWriter();
  10. writer.setColumnWidth(-1, 18);
  11. // 设置样式
  12. StyleSet style = writer.getStyleSet();
  13. CellStyle cellStyle = style.getCellStyle();
  14. cellStyle.setWrapText(true);
  15. CellStyle headCellStyle = style.getHeadCellStyle();
  16. //水平居中
  17. headCellStyle.setAlignment(HorizontalAlignment.LEFT);
  18. headCellStyle.setWrapText(true);
  19. //设置内容字体
  20. Font font = writer.createFont();
  21. //加粗
  22. font.setBold(true);
  23. //设置标题字体大小
  24. font.setFontHeightInPoints((short) 16);
  25. headCellStyle.setFont(font);
  26. writer.setStyleSet(style);
  27. writer.renameSheet(0, "评价记录");
  28. if (CollectionUtils.isEmpty(taskList)) {
  29. list = this.getActivityList(data, setList());
  30. titleList = this.getActivityList(data, setTitleList());
  31. if(!CollectionUtils.isEmpty(list)) {
  32. //创建标题和表头信息
  33. if (!CollectionUtils.isEmpty(titleList)) {
  34. writer.merge(15, titleList.get(0).get("bumenchejian") + "评价记录", true);
  35. writer.merge(3, StringUtils.join("单位:", titleList.get(0).get("bumenchejian")), true);
  36. writer.writeRow(new ArrayList<>());
  37. layout(writer, titleList, 0);
  38. writer.setRowHeight(2, 40);
  39. }
  40. setHeader(writer);
  41. writer.write(list, true);
  42. }
  43. } else {
  44. Integer num = 0;
  45. for (int i = 0; i < taskList.size(); i++) {
  46. list = this.getActivityList(data.setTaskName(taskList.get(i)), setList());
  47. titleList = this.getActivityList(data.setTaskName(taskList.get(i)), setTitleList());
  48. if(!CollectionUtils.isEmpty(list)) {
  49. //创建标题和表头信息
  50. if (!CollectionUtils.isEmpty(titleList)) {
  51. if(i==0) {
  52. writer.merge(15, titleList.get(0).get("bumenchejian") + "评价记录", true);
  53. }else {
  54. writer.writeRow(new ArrayList<>());
  55. }
  56. writer.merge(3, StringUtils.join("单位:", titleList.get(0).get("bumenchejian")), true);
  57. writer.writeRow(new ArrayList<>());
  58. writer.setRowHeight(num + 2, 40);
  59. layout(writer, titleList, num);
  60. }else {
  61. writer.merge(15, "评价记录", true);
  62. writer.merge(3, StringUtils.join("单位:"), true);
  63. writer.writeRow(new ArrayList<>());
  64. writer.writeRow(new ArrayList<>());
  65. layout(writer, num);
  66. }
  67. num += list.size() + 4;
  68. setHeader(writer);
  69. writer.write(list, true);
  70. }
  71. }
  72. }
  73. response.setContentType("application/vnd.ms-excel;charset=utf-8");
  74. String name = new String("评价记录".getBytes("utf-8"), "iso-8859-1");
  75. response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xls");
  76. response.setHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "fileName");
  77. writer.flush(out, true);
  78. // 关闭writer,释放内存
  79. writer.close();
  80. IoUtil.close(out);
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. }
  84. }
  85. public static void setHeader(ExcelWriter writer) {
  86. Map<String, String> objectMap = new LinkedHashMap<>();
  87. objectMap.put("xuhao", "序号");
  88. objectMap.put("zuoyebuzhou", "作业步骤");
  89. objectMap.put("weixianyuanhuoqianza", "危险源");
  90. objectMap.put("zhuyaohouguo", "主要后果");
  91. objectMap.put("gongchengcuoshi", "工程控制");
  92. objectMap.put("guanlicuoshi", "管理措施");
  93. objectMap.put("peixunjiaoyu", "培训教育");
  94. objectMap.put("getifanghu", "个体防护");
  95. objectMap.put("yingjichuzhi", "应急处置");
  96. objectMap.put("lquzhi", "L");
  97. objectMap.put("equzhi", "E");
  98. objectMap.put("cquzhi", "C");
  99. objectMap.put("dzhi7", "D");
  100. objectMap.put("pingjiajibie", "F");
  101. objectMap.put("guankongjibie", "FF");
  102. objectMap.put("jianyixinzenggaijinc", "措施");
  103. writer.setHeaderAlias(objectMap);
  104. }
  105. public static void layout(ExcelWriter writer, List<Map<String, Object>> list, Integer i) {
  106. writer.merge(1 + i, 1 + i, 4, 10,
  107. StringUtils.join("风险点岗位:", list.get(0).get("fengxiandiangangwei"))
  108. .replace("[", "").replace("]", ""), true);
  109. writer.merge(1 + i, 1 + i, 11, 15,
  110. StringUtils.join("工作任务:", list.get(0).get("fengxiandianmingchen")), true);
  111. commonLayout(writer, i);
  112. }
  113. public static void layout(ExcelWriter writer, Integer i) {
  114. writer.merge(1 + i, 1 + i, 4, 10,
  115. StringUtils.join("风险点岗位:")
  116. .replace("[", "").replace("]", ""), true);
  117. writer.merge(1 + i, 1 + i, 11, 15,
  118. StringUtils.join("工作任务:"), true);
  119. commonLayout(writer, i);
  120. }
  121. public static void commonLayout(ExcelWriter writer, Integer i) {
  122. writer.merge(2 + i, 3 + i, 0, 0, "序号", true);
  123. writer.merge(2 + i, 3 + i, 1, 1, "作业步骤", true);
  124. writer.merge(2 + i, 3 + i, 2, 2, "危险源", true);
  125. writer.merge(2 + i, 3 + i, 3, 3, "主要后果", true);
  126. writer.merge(2 + i, 2 + i, 4, 8, "A", true);
  127. writer.merge(2 + i, 3 + i, 9, 9, "L", true);
  128. writer.merge(2 + i, 3 + i, 10, 10, "E", true);
  129. writer.merge(2 + i, 3 + i, 11, 11, "C", true);
  130. writer.merge(2 + i, 3 + i, 12, 12, "D", true);
  131. writer.merge(2 + i, 3 + i, 13, 13, "F", true);
  132. writer.merge(2 + i, 3 + i, 14, 14, "FF", true);
  133. writer.merge(2 + i, 3 + i, 15, 15, "措施", true);
  134. }

发表评论

表情:
评论列表 (有 0 条评论,56人围观)

还没有评论,来说两句吧...

相关阅读