如何使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值