poi-tl文档导出word
使用POI-tl做选择导出内容
导入依赖
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.7.3</version>
</dependency>
API
UID、TID、RID、KID过滤条件,可不传
id看情况、type传你需要导出的块。例:传:1 导出第一块,传1、2导出第一二块
@GetMapping("/exportWord")
public void wordTenantSponsor(@ApiParam @RequestParam() Long id,
@RequestParam() List type,
HttpServletResponse response,
HttpServletRequest request,
@RequestHeader("X-Real-UID") Long uid,
@RequestHeader("X-Real-TID") Long tid,
@RequestHeader("X-Real-RID") Long rid,
@RequestHeader("kong-request-id") String kid) throws Exception {
Tenant one = tenantService.findOne(id);
HashMap<String,String > paramMap=new HashMap<>();
paramMap.put("id",id.toString());
paramMap.put("uid",uid.toString());
paramMap.put("tid",tid.toString());
paramMap.put("rid",rid.toString());
paramMap.put("kid",kid);
TenantSponsorExport tenantSponsorExport = new TenantSponsorExport();
try {
tenantService.tenantSponsorExportWord(one,tenantSponsorExport,id);
} catch (Exception e) {
e.printStackTrace();
log.error("文档导出转换基础数据异常");
}
HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
Configure config = Configure.newBuilder()
.bind("equipmentInfoList", policy)
.bind("documentManagement", policy)
.bind("mainPeople",policy)
.bind("trainingInfo",policy)
.build();
String tempFile = "biz-uc/src/main/resources/研发机构基本情况.docx";
XWPFTemplate template = XWPFTemplate.compile(tempFile, config).render(
new HashMap<String,Object>(16){{
if (type.contains("1")){
put("sponsor",tenantSponsorExport);
}if (type.contains("2")){
put("basicInfo",tenantSponsorExport);
}
if (type.contains("3")){
put("main",tenantSponsorExport);
}
if (type.contains("4")){
put("document",tenantSponsorExport);
}
if (type.contains("5")){
put("equipment",tenantSponsorExport);
}
if (type.contains("6")){
put("training",tenantSponsorExport);
}
}}
);
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
template.write(bos);
byte[] bytes = bos.toByteArray();
tenantService.toWordWeb(response, bytes, "基本情况.docx");
} catch (IOException e) {
log.error("导出失败");
}
}
Server实现类
@Override
public void tenantSponsorExportWord(Tenant one, TenantSponsorExport tenantSponsorExport,Long id) {
//写单独表格内的数据(不需要循环的)
//需要循环的、如下
List<Tenant.SponsorInfo.FileManagement> fileManagements = one.getSponsorInfo().getFileManagements();
ArrayList<TenantSponsorExport.Document> documents = new ArrayList<>();
//记得判空
if (!CollectionUtils.isEmpty(fileManagements)) {
one.getSponsorInfo().getFileManagements().forEach(tenant -> {
TenantSponsorExport.Document document = new TenantSponsorExport.Document();
TenantRuleAndSopType tenantRuleAndSopType = tenant.getTenantRuleAndSopType();
document.setDocumentType(tenantRuleAndSopType.getValue());
document.setEffectTime(tenant.getOperativeDate() != null ? tenant.getOperativeDate().toString() : "");
document.setTitle(tenant.getTitle() != null ? tenant.getTitle() : "");
documents.add(document);
});
}
//最后set到大的对象中,
tenantSponsorExport.setDocumentManagement(documents);
}
//转给前台
@Override
public void toWordWeb(HttpServletResponse response, byte[] resultByte, String fileName) throws IOException {
response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment;filename=\""+"out_template.docx"+"\"");
OutputStream os = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
os.write(resultByte);
os.flush();
os.close();
}
注:
如何不需要type,直接导出,把大的对象传进去
/**
* 导出word
* @param id
* @param response
* @param request
* @param uid
* @param tid
* @param rid
* @param kid
* @throws Exception
*/
@GetMapping("/exportTenantSponsorWord")
public void wordTenantSponsor(@ApiParam @RequestParam() Long id,
// @RequestParam() List type,
HttpServletResponse response,
HttpServletRequest request,
@RequestHeader("X-Real-UID") Long uid,
@RequestHeader("X-Real-TID") Long tid,
@RequestHeader("X-Real-RID") Long rid,
@RequestHeader("kong-request-id") String kid) throws Exception {
Tenant one = tenantService.findOne(id);
HashMap<String,String > paramMap=new HashMap<>();
paramMap.put("id",id.toString());
paramMap.put("uid",uid.toString());
paramMap.put("tid",tid.toString());
paramMap.put("rid",rid.toString());
paramMap.put("kid",kid);
TenantSponsorExport tenantSponsorExport = new TenantSponsorExport();
try {
tenantService.tenantSponsorExportWord(one,tenantSponsorExport,id);
} catch (Exception e) {
e.printStackTrace();
log.error("文档导出转换基础数据异常");
}
HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
Configure config = Configure.newBuilder()
.bind("equipmentInfoList", policy)
.bind("documentManagement", policy)
.bind("mainPeople",policy)
.bind("trainingInfo",policy)
.build();
String tempFile = "biz-uc/src/main/resources/基本情况.docx";
XWPFTemplate template = XWPFTemplate.compile(tempFile, config).render(
tenantSponsorExport
// new HashMap<String,Object>(16){{
// if (type.contains("1")){
// put("sponsor",tenantSponsorExport);
// }if (type.contains("2")){
// put("basicInfo",tenantSponsorExport);
// }
// if (type.contains("3")){
// put("main",tenantSponsorExport);
// }
// if (type.contains("4")){
// put("document",tenantSponsorExport);
// }
// if (type.contains("5")){
// put("equipment",tenantSponsorExport);
// }
// if (type.contains("6")){
// put("training",tenantSponsorExport);
// }
// }}
);
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
template.write(bos);
byte[] bytes = bos.toByteArray();
tenantService.toWordWeb(response, bytes, "研发机构基本情况.docx");
} catch (IOException e) {
log.error("导出失败");
}
}
模板:
具体的用法官网给的也比较详细。
http://deepoove.com/poi-tl/