本文将给大家带来如何导入数据到word文档中,固定传值和动态制作表格传值等。
依赖:
com.deepoove
poi-tl
1.7.3
org.apache.poi
poi-ooxml
4.1.2
org.apache.poi
poi-ooxml-schemas
4.1.2
org.apache.poi
poi
4.1.2
com.deepoove
poi-tl
1.9.1
创建word模板:
说明:{{ }} 这个是用来做占位符的,后续代码中替换值。
如果导出的数据是个集合list,那么在你的表格标题的第一个单元格输入{{list}}占位符,下面空白单位元是用来占位集合中元素key的,占位符是:[] 如图
代码实例:
public void getStandingBook(String activityId, HttpServletResponse response, HttpServletRequest request) {
try {
//获取文件流
InputStream stream = getClass().getClassLoader().getResourceAsStream("static/word.docx");
//获取临时文件
File file = new File("static/word.docx");
//将读取到的类容存储到临时文件中,后面就可以用这个临时文件访问了
FileUtils.copyInputStreamToFile(stream, file);
//这个时候再去获取证书的文件路径 就可以正常获取了
String filePath = file.getAbsolutePath();
QueryWrapper tActivityQueryWrapper = new QueryWrapper<>();
tActivityQueryWrapper.eq("uuid", activityId);
tActivityQueryWrapper.eq("status", "0");
TActivity tActivity = tActivityService.getOne(tActivityQueryWrapper);
if (tActivity == null) {
throw new CustomException("导出失败,活动不存在!");
}
List
重点代码在这里:
//渲染表格
HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
Configure config = Configure.newBuilder().bind("detailList", policy).build();
double finalTotalNum = totalNum;
XWPFTemplate template = XWPFTemplate.compile(filePath, config).render(
new HashMap() {{
put("activityName", tActivity.getActivityName());
put("activityBackground", tActivity.getActivityBackground());
put("startTime", DateUtils.getStringDate(tActivity.getStartTime()));
put("endTime", DateUtils.getStringDate(tActivity.getEndTime()));
put("activityContent", tActivity.getActivityContent());
put("distinctidName", tActivity.getDistinctidName());
put("activityLimit", tActivity.getActivityLimit());
put("organizer", tActivity.getOrganizer());
put("nowDate", DateUtils.getStringDate(new Date()));
put("totalNum", finalTotalNum);
put("activityAddress", tActivity.getActivityAddress());
put("activityReviewWeb", tActivity.getActivityReviewWeb());
put("detailList", detailList);
put("picList", pic);
}}
);
关于向word文档中插入多张图片:
代码:
//处理图片
String[] arr = tActivity.getActivityReviewUrl().split(",");
List pic = new ArrayList<>();
if (arr != null && arr.length > 0) {
for (String str : arr) {
//File ff = aliyunCloudStorageService.getFileByUrl(str);
BufferedImage bi = null;
try {
bi = ImageIO.read(ff);
} catch (Exception e) {
e.printStackTrace();
}
//int width = bi.getWidth(); // 像素
//if (width > 500) {
// width = 500;
//}
//int height = bi.getHeight(); // 像素
//if (height > 500) {
// height = 500;
//}
Map picMap = new HashMap();
picMap.put("urlImg", Pictures.ofUrl(str, PictureType.JPEG).size(width, height).create());
pic.add(picMap);
System.out.println(str);
bi.flush();
}
}
文档中插入多张图片的占位符是:{{?picList}}{{@urlImg}}{{/picList}} picList是你集合key ,urlImg是集合内元素
导出结果:



