• Java的XWPFTemplate word生成列表


    Java的XWPFTemplate工具类导出word.docx的使用_xwpftemplate 语法_youmdt的博客-CSDN博客

    如果是表格的列表参考上面这篇文章即可,比较复杂的列表遍历暂时还没找到方法,只能手动创建表格了

    上面是模板,非常简单,以为我们是要自己创建表格

    先看结果吧

    自己写的表格基本就是这样,后面加上换行和宽度高度调节即可。

    下面的代码是最基本的,所以也就没加高度换行等调节。有时候再补充上去。

    下面的代码比较凌乱,还没开发完成,想整合成一个通用的接口,现在只做了日志的,把没有用的内容删掉即可。凑合着看。

    1. /**
    2. * 安全日志通用导出word
    3. */
    4. @Override
    5. public void exportWord(AqscSecurityLog aqscSecurityLog, HttpServletResponse response) throws IOException {
    6. String filePath = "";
    7. String filename = "";
    8. String params1 = aqscSecurityLog.getParams1();
    9. if (Objects.equals(params1, "1")) { //日报
    10. filePath = "/word/day.docx";
    11. filename = "安全日志.docx";
    12. } else if (Objects.equals(params1, "2")) { //周报
    13. filePath = "/word/day.docx";
    14. filename = "安全周报.docx";
    15. } else if (Objects.equals(params1, "3")) { //月报
    16. filePath = "/word/day.docx";
    17. filename = "安全月报.docx";
    18. } else if (Objects.equals(params1, "4")) { //季报
    19. filePath = "/word/day.docx";
    20. filename = "安全季报.docx";
    21. } else {
    22. throw new ServiceException("params1不等于1234,请联系管理员!");
    23. }
    24. InputStream inputStream = getServiceFile(filePath);
    25. XWPFTemplate document = XWPFTemplate.compile(inputStream);
    26. Map<String, Object> data = new HashMap<>();
    27. List<String> ids = aqscSecurityLog.getIds();
    28. List<AqscSecurityLog> logs = aqscSecurityLogMapper.selectAqscSecurityLogsByids(ids);
    29. //日志
    30. if (Objects.equals(params1, "1")) {
    31. processingDayData(logs, data, document);
    32. }
    33. document.render(data);
    34. exportWordAfter(document, response, filename);
    35. }
    36. //处理日志数据
    37. private void processingDayData(List<AqscSecurityLog> logs, Map<String, Object> data, XWPFTemplate document) {
    38. data.put("companyName", logs.get(0).getCompanyName());
    39. data.put("name", logs.get(0).getFillePerson());
    40. XWPFTable table2 = document.getXWPFDocument().createTable(1, 2);
    41. table2.getRow(0).getCell(0).setText("日 期");
    42. table2.getRow(0).getCell(1).setText("工作内容");
    43. table2.getRow(0).getCell(0).setWidth("30%");
    44. table2.getRow(0).getCell(1).setWidth("68%");
    45. logs.forEach(it -> {
    46. XWPFTable table = document.getXWPFDocument().createTable(3, 2);
    47. // 合并左边的三行
    48. for (int i = 0; i < 3; i++) {
    49. XWPFTableCell cell = table.getRow(i).getCell(0);
    50. if (i == 0) {
    51. cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
    52. } else {
    53. cell.getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
    54. }
    55. }
    56. // 向表格中插入数据
    57. if (it.getWeather() != null) { //日期 (星期) (天气)
    58. table.getRow(0).getCell(0).setText(it.getStringTime() + "(" + it.getWeek() + ")" + it.getWeather());
    59. } else {
    60. table.getRow(0).getCell(0).setText(it.getStringTime() + "(" + it.getWeek() + ")");
    61. }
    62. table.getRow(0).getCell(1).setText(it.getContent());
    63. table.getRow(1).getCell(1).setText(it.getExperienceAndExperience());
    64. table.getRow(2).getCell(1).setText(it.getOtherRecords());
    65. table.getRow(0).getCell(0).setWidth("30%");
    66. table.getRow(0).getCell(1).setWidth("68%");
    67. });
    68. }
    69. public void exportWordAfter(XWPFTemplate workbook, HttpServletResponse response, String filename) {
    70. filename = URLEncodeUtil.encode(filename);
    71. response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.documentz");
    72. //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
    73. response.setHeader("Content-Disposition", "attachment;filename=" + filename);
    74. response.setHeader("filename", filename);
    75. Assert.isTrue(!ObjectUtils.isEmpty(workbook), "导出遇到了问题,请联系管理员");
    76. try (ServletOutputStream out = response.getOutputStream()) {
    77. workbook.write(out);
    78. workbook.close();
    79. } catch (Exception e) {
    80. throw new RuntimeException(e);
    81. }
    82. }

    如果是返回到浏览器,前端也得配置一下,可以参考下面这篇文章配置

    java-excel、word、zip返回前端-CSDN博客

  • 相关阅读:
    在linux下使用ffmpeg方法
    想过为什么家里的IP是192.168开头的吗?
    docker-compose deploy 高可用 elasticsearch TLS
    dpdk 多进程共享内存描述信息的机制
    某ke登录密码加密寻找
    LeetCode //C - 103. Binary Tree Zigzag Level Order Traversal
    HAProxy的详解和使用
    基于JavaWeb的图书售卖网站(源码+部署+LW)
    【LeetCode热题100】--394.字符串解码
    支付通道的安全性探讨
  • 原文地址:https://blog.csdn.net/m0_74608954/article/details/134407905