如何使用poi-tl开源工具 导出word文档

  1. pom文件引入官方jar包 ,这里使用的是1.7.3 版本。
<dependency>
			<groupId>com.deepoove</groupId>
			<artifactId>poi-tl</artifactId>
			<version>1.7.3</version>
</dependency>
  1. 新建工具类,代码抽离。
public class WordPoiUtils {

    public static RowRenderData renderData() {
        Style style = new Style();
        style.setBold(true);
        style.setFontSize(10);
        RowRenderData header = RowRenderData.build(
                new TextRenderData("序号", style),
                new TextRenderData("评分点", style),
                new TextRenderData("考核要求", style),
                new TextRenderData("满分值", style),
                new TextRenderData("得分", style));

        return header;
    }

    /**
     * 
     *
     * @return
     */
    public static RowRenderData renderTeachHeadData() {
        Style style = new Style();
        style.setBold(true);
        style.setFontSize(10);
        RowRenderData header = RowRenderData.build(
                new TextRenderData("年级", style),
                new TextRenderData("班级", style),
                new TextRenderData("学号", style),
                new TextRenderData("姓名", style),
                new TextRenderData("学科", style),
                new TextRenderData("实验室", style),
                new TextRenderData("桌号", style),
                new TextRenderData("实验名称", style));
        return header;
    }

    /**
     * 
     *
     * @return
     */
    public static RowRenderData renderExamHeadData() {
        Style style = new Style();
        style.setBold(true);
        style.setFontSize(10);
        RowRenderData header = RowRenderData.build(
                new TextRenderData("考场", style),
                new TextRenderData("准考证号", style),
                new TextRenderData("姓名", style),
                new TextRenderData("学科", style),
                new TextRenderData("实验室", style),
                new TextRenderData("桌号", style),
                new TextRenderData("实验名称", style));

        return header;
    }

    /**
     * 获取样式
     *
     * @param text
     * @param style
     * @return
     */
    public static TextRenderData textRenderData(String text, Style style) {
        return new TextRenderData(text, style);
    }
}

3.配置模板,模板里key可以随意编写,只要符合java命名规范。
在这里插入图片描述

4.业务代码实现。

log.info("exportTestPaper:{}", JSON.toJSONString(vo));
        Map<String, Object> data = new HashMap<>();
        val studentList = this.getStudentList(vo);
        Style style = new Style();
        style.setFontSize(14);
        style.setBold(true);
        String examName = "";
        if (CollectionUtils.isNotEmpty(studentList)) {
            val student = studentList.get(0);
            val exam = mapper.select(vo.getTestExamId());
            if (null != exam) {
                TextRenderData textRenderData = new TextRenderData();
                    val school = mapper.select();
                    if (null != school) {
                        textRenderData = WordPoiUtils.textRenderData(school.getName() + Constants.TEST_NAME, style);
                    }
                    // 列表
                    RowRenderData header1 = WordPoiUtils.renderTeachHeadData();
                    RowRenderData row0 = RowRenderData.build(
                            getListData(student).get("年级"),
                            getListData(student).get("班级"),
                            getListData(student).get("学号"),
                            getListData(student).get("姓名"),
                            getListData(student).get("学科"),
                            getListData(student).get("实验室"),
                            getListData(student).get("桌号"),
                            getListData(student).get("实验名称")
                    );
                    data.put("tableHead", new MiniTableRenderData(header1, Arrays.asList(row0)));
                data.put("testPaperName", textRenderData);
            }
            examName = examName.concat(student.getTestName());
            data.put("studentName", student.getStudentName());
            data.put("assessmentScore", student.getTotalScore());
            data.put("date", DateUtils.formatDateToString(exam.getStartTime(), DateUtils.YYYY_MM_DD));
        }
        // 获取表头
        RowRenderData header = WordPoiUtils.renderData();
        List<ZKTestPointResultVO> list = this.getTestPoint(vo);
        List<RowRenderData> listRow = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(list)) {
            list.forEach(e -> {
                listRow.add(RowRenderData.build(e.getSort(), e.getAssessmentPoint(), e.getAssessmentRequirement(), e.getScore().toString(), null != e.getTestPointScore() ? e.getTestPointScore().toString() : "0"));
            });
        }
        // 添加到Word kv 里
        data.put("table", new MiniTableRenderData(header, listRow));
        log.info("当前导出数据为:{}", JSON.toJSONString(data));
        return data;

5.文档导出。

  try {
            val map = service.exportTestPaper(vo);
            String filePath = Config.getProfile() + "/template/模板名称.docx";
            log.info("导出路径为:{}", filePath);
            XWPFTemplate template = XWPFTemplate.compile(filePath).render(map);
            String downPath = Config.getDownloadPath() + "temp名称-" + map.get("name") + "-" + vo.getTestBatch() + ".docx";
            FileOutputStream out;
            out = new FileOutputStream(downPath);
            template.write(out);
            out.flush();
            out.close();
            template.close();
            return T.success(downPath);
        } catch (Exception e) {
            e.printStackTrace();
            return T.error("导出失败!");
        }

6.传送门
http://deepoove.com/poi-tl/#_%E6%96%87%E6%9C%AC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
POI-tl是一个基于Apache POIJava库,用于动态生成Word文档。它提供了一种简单而强大的方式来根据Word模板生成具有动态内容的文档。在使用POI-tl进行动态导出Word文档时,你需要在模板中定义需要替换的标记,并在代码中使用POI-tl的API来填充这些标记。 首先,你需要在项目中添加POI-tl的依赖。具体的依赖配置可以参考\[1\]中提供的文章。 然后,你需要准备一个Word模板,其中包含需要动态填充的内容。在模板中,你可以使用自定义的标记来标识需要替换的部分。这些标记可以是任意的字符串,但需要与代码中的标记保持一致。 接下来,在代码中,你可以使用POI-tl的API来加载模板并替换其中的标记。你可以使用POI-tl提供的方法来设置文本、图片、表格、页眉、页脚等内容。具体的使用方法可以参考\[3\]中提供的教程。 最后,你可以将生成的Word文档导出到文件或直接在浏览器中下载。你可以使用POI-tl提供的方法来实现导出功能。具体的导出方法可以参考\[2\]中提供的代码示例。 总结起来,使用POI-tl动态导出Word文档的步骤包括添加依赖、准备模板、替换标记、导出文档。希望这些信息对你有帮助。 #### 引用[.reference_title] - *1* *2* [SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格、合并单元格)](https://blog.csdn.net/qq_26383975/article/details/112238802)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [poi-tl导出word](https://blog.csdn.net/weixin_43580824/article/details/129549483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值