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