Word模板导出集成文档

目录

一、引入依赖

二、后端代码

i.首先加载WordParseService、OfficeTemService接口

ii.获取导出数据的模板

iii.获取导出模板的所需参数

iiii.调用WordParseService中的expFileToWord方法,并传入参数;

iiiii.示例

三、功能配置

i.创建数据源(主表)

注意:

a.数据方式:单条数据、多条数据

aa.读取方式:业务表、自定义

ii.创建数据字段(子表)

注意:

b.名称、编码对应数据源主表中的字段名、字段编码;或者您自定义方法中的字段编码;

bb.字段类型:文本、数据字典、图片、word文档

iii.文档模板

c.新建文档模板

注意:

d.模板文件编辑

dd.主表编码:要导出表数据的主表的表编码;

ddd.数据源编码:选择刚才创建的相应的数据源;

iiii.前端代码


一、引入依赖

		<!--org.apache.poi-->
		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-codec</artifactId>
                    <groupId>commons-codec</groupId>
                </exclusion>
                <exclusion>
                    <groupId>commons-collections</groupId>
                    <artifactId>commons-collections</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>commons-collections4</artifactId>
                    <groupId>org.apache.commons</groupId>
                </exclusion>
            </exclusions>
        </dependency>
		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-excelant</artifactId>
            <version>4.1.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>ant</artifactId>
                    <groupId>org.apache.ant</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>poi</artifactId>
                    <groupId>org.apache.poi</groupId>
                </exclusion>
            </exclusions>
        </dependency>
		
		<!--xml解析-->
		
		<dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>3.1.0</version>
        </dependency>

二、后端代码

i.首先加载WordParseService、OfficeTemService接口、拷贝到所需的项目中;

ii.获取导出数据的模板

    /**
     * 获取模版对象
     * @param temCode
     * @param refresh
     * @return
     */
    public DynaBean getTemplate(String temCode, String refresh);

iii.获取导出模板的所需参数

    /***
     * 根据文档模板拿到需要导出的数据Map
     * @param template
     * @param whereSql 导出数据的whereSql
     * @return Map<String, Object> String-数据源NAME,Object--数据(DynaBean或List<DynaBean></>)
     */
    Map<String, Object> assembleDatas(DynaBean template,String whereSql);

    /***
     * 根据文档模板拿到数据源字段Map
     * @param template
     * @return Map<String, Map<String, DynaBean>> --Map<数据源NAME,Map<字段名,字段DynaBean></>></>
     */
    Map<String, Map<String, DynaBean>> assembleFieldData(DynaBean template);


    /***
     * 根据文档模板拿到数据源Map
     * @param template
     * @return Map<String, DynaBean> --String -数据源Name,DynaBean-数据源Bean
     */
    Map<String, DynaBean> assembleDataSource(DynaBean template);

iiii.调用WordParseService中的expFileToWord方法,并传入参数;

    /****
     * word导出
     * @param template 文档模板
     * @param officeDataSource 数据源Map
     * @param officeDatas 需要导出的数据Map
     * @param officeField 数据源字段Map
     * @param returnObj 
     * @return
     */
    public InputStream expFileToWord(DynaBean template,Map<String,DynaBean> officeDataSource,Map<String,Object> officeDatas, Map<String,Map<String,DynaBean>> officeField, JSONObject returnObj);

iiiii.示例

    @RequestMapping(value = "/downloadWord")
    @ResponseBody
    public void downloadWord(MethodArgument param){
        JSONObject returnObj=new JSONObject();
        HttpServletRequest request=param.getRequest();
        //获取全部参数
        String dataStr = request.getParameter("data");
        if(StringUtil.isEmpty(dataStr)){
            throw new PlatformException("参数格式错误", PlatformExceptionEnum.JE_CORE_EXCEL_EXP_ERROR, request);
        }
        //base64转码
        dataStr = Base64.decodeStr(dataStr);
        //获取参数集
        com.alibaba.fastjson.JSONObject params = com.alibaba.fastjson.JSONObject.parseObject(dataStr);
        String code="";
        if(params.containsKey("code")){
            code=params.getString("code");
        }
        String fileName="";
        if(params.containsKey("fileName")){
            fileName=params.getString("fileName");
        }
        String whereSql="";
        if(params.containsKey("whereSql")){
            whereSql=params.getString("whereSql");
        }
        //模板
        DynaBean template=officeTemService.getTemplate(code,"0");
        //数据源
        Map<String,DynaBean> officeDataSource =wordParseService.assembleDataSource(template);
        //根据模板文件,拿到数据源,然后根据数据源拿到所有的数据
        Map<String,Object> officeDatas = wordParseService.assembleDatas(template,whereSql);
        //拿到字段展示方式
        Map<String,Map<String,DynaBean>> officeField = wordParseService.assembleFieldData(template);
        //模板替换
        try {
            InputStream inputStream = wordParseService.expFileToWord(template, officeDataSource,officeDatas, officeField, returnObj);
            if(returnObj.containsKey("errorMsg")){
                throw new PlatformException(returnObj.getString("errorMsg"), PlatformExceptionEnum.JE_DOC_ERROR,new Object[]{code,officeDatas});
            }else{
                HttpServletResponse response=param.getResponse();
                response.reset();
                if(StringUtil.isEmpty(fileName)){
                    fileName=returnObj.getString("fileName");
                }
                fileName = URLEncoder.encode(fileName, "UTF-8");
                response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
                response.setHeader("Content-Length", String.valueOf(inputStream.available()));
                //写入文件流
                response.setContentType("application/octet-stream");
                OutputStream toClient = response.getOutputStream();
                IoUtil.copy(inputStream, toClient);
                IoUtil.close(inputStream);
                toClient.flush();
                toClient.close();
            }
        }catch (PlatformException e){
            throw e;
        } catch (Exception e) {
            throw new PlatformException("生成输出流文件报错", PlatformExceptionEnum.JE_DOC_ERROR,new Object[]{code,officeDatas});
        }
    }

三、功能配置

i.创建数据源(主表)

注意:

a.数据方式:单条数据、多条数据

单条数据--表单内的所有数据一一对应;

示例:

多条数据--导出为列表;

示例:

aa.读取方式:业务表、自定义

业务表:填写表名称、表编码、过滤条件(没有可以不填),系统自动读取;

自定义:填写类名、方法名,由开发人员自主实现;数据格式为:单条数据返回DynaBean;多条数据返回List<DynaBean>;

ii.创建数据字段(子表)

注意:

b.名称、编码对应数据源主表中的字段名、字段编码;或者您自定义方法中的字段编码;

bb.字段类型:文本、数据字典、图片、word文档

文本:普通文本,不具有特殊性;配置信息为空;

示例:

数据字典:导出为多选框并选中;配置信息为:数据字典编码,是否换行;

示例:

图片:导出为图片;配置信息为:宽、高;

示例:

word文档:导出为在指定位置拼接当前字段的word文档;配置信息为空;

示例:

iii.文档模板

c.新建文档模板

注意:

d.模板文件编辑

新建word文档(.docx),将数据源中的数据源编码+数据源字段填入到你想导出word的相应位置;然后上传至文档模板;

示例:

dd.主表编码:要导出表数据的主表的表编码;

ddd.数据源编码:选择刚才创建的相应的数据源;

示例:

iiii.前端代码

e.点击下载代码,全选复制到相应按钮,保存即可;

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值