poi-tl导出word文档 可做选择导出

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/

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值