数据导出生成word附件使用POI的XWPFTemplate对象

比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel。
Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于

操作Excel格式文件的HSSF和

用于操作Word的HWPF;

一、前端使用get请求和post请求都可以

get请求:

window.location.href= appPath+"/export/handoverForm?ticketId="+self.ticketId +
                    "&complainId="+row.id+"&formCode="+self.exportFormCode.complainDetail;

隐藏form表单改写成post请求,form表单get和post都可以:

<form id="exportForm" action="/service/xfComplain/exportCaseLedger" method="post">
        <input type="hidden" name="dataRange" id="dataRange"/>
        <input type="hidden" name="processStatus" id="processStatus"/>
        <input type="hidden" name="cantonCode" id="cantonCode"/>
        <input type="hidden" name="startDate" id="startDate"/>
        <input type="hidden" name="endDate" id="endDate"/>
        <input type="hidden" name="multiFildMatch" id="multiFildMatch"/>
    </form>
$("#dataRange").val(self.table.pageData.dataRange);
            $("#processStatus").val(self.table.pageData.processStatus);
            $("#startDate").val(self.table.pageData.startDate);
            $("#endDate").val(self.table.pageData.endDate);
            $("#multiFildMatch").val(self.table.pageData.multiFildMatch);
            $(‘#exportForm‘).submit();

二、java代码

@ResponseBody
    @RequestMapping("/exportWord")
    public void exportHandoverForm(HttpServletRequest request,
                                   HttpServletResponse response, ExportParam exportParam) {
        String projectPath = getProjectPath(request);
        String templateFile = getTemplateFile(exportParam, projectPath, request);
        Map<String, Object> data = new HashMap<>();
        File file = null;
        InputStream in = null;
        ServletOutputStream out = null;
        try {
            // 数据源
            HandoverModel handoverModel = getHandoverFormData(exportParam.getComplainId());
            // 反射机制,获取所有属性对象,在拿到属性值,设置数据
            for (Field field : HandoverModel.class.getDeclaredFields()) {
                // 暴力反射,不是public修饰的属性也要获取
                field.setAccessible(true);
                data.put(field.getName(), field.get(handoverModel));
            }
            // 数据源组成map键值对形式
            data.put("reportorList", handoverModel.getReportorList().getDatas());
            String fileName = handoverModel.getCaseCode();
            String exportFilePath = projectPath + ExportConstant.DEFAULT_EXPORT_PATH;
            logger.info("----------templateFile:" + templateFile);
            logger.info("-----------projectPath:" + projectPath);
            // Configure对象是处理表格数据,可以自适应生成对应行数数据
            Configure config = Configure.newBuilder().customPolicy("reportorList", new FileTablePolicy()).build();
            // XWPFTemplate对象是处理word文档对象,根据map数据源的键值对渲染文档数据
            XWPFTemplate template = XWPFTemplate.compile(templateFile, config).render(data);
            // 文件生成到本地,先生成好文档,再读取到内存中响应给前台
            String downloadFileName = fileName + ".docx";
            File outPutFile = new File(exportFilePath);
            if (!outPutFile.exists()) {
                outPutFile.mkdirs();
            }
            FileOutputStream outFile = new FileOutputStream(exportFilePath + downloadFileName);
            template.write(outFile);
            outFile.flush();
            outFile.close();
            template.close();
            // 通过文件流读取到文件,再将文件通过response的输出流,返回给页面下载
            file = new File(projectPath + ExportConstant.DEFAULT_EXPORT_PATH + downloadFileName);
            in = new FileInputStream(file);
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/msword");
            response.setHeader("Content-Disposition", "attachment;filename="
                    .concat(String.valueOf(URLEncoder.encode(downloadFileName, "UTF-8"))));
            out = response.getOutputStream();
            byte[] buffer = new byte[512];
            int bytesToRead = -1;
            // 用响应对象response中的输出流读取生成好的文件
            while ((bytesToRead = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytesToRead);
            }
        } catch (Exception e) {
            logger.error("导出word出错", e);
        } finally {
            if (in != null) try {
                in.close();
                if (out != null) out.close();
                if (file != null) file.delete(); // 删除临时文件
            } catch (IOException e) {
                logger.error("删除删除临时文件出错", e);
            }
        }
    }

使用XWPFTemplate引擎,插件化Configure插入表格;

原文地址:https://www.cnblogs.com/wmqiang/p/11602884.html

时间: 2024-10-18 19:53:37

数据导出生成word附件使用POI的XWPFTemplate对象的相关文章

java导出生成word

最近做的项目,需要将一些信息导出到word中.在网上找了好多解决方案,现在将这几天的总结分享一下. 目前来看,java导出word大致有6种解决方案: 1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用.DLL动态链接库的生成需要windows平台的支持.该方案只能在windows平台实现,是其局限性. 2:Apache POI包括一系列的API,它

实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多都是以json数据填充的.在导入excel填充json数据到页面时,真的让我差点吐血了.在做这个导入导出的时候,那一个礼拜都是黑暗的. 好了,废话不多说了,我今天就给大家展示这个两个功能的核心点,excel生成json数据和json数据生成excel文件. 一:从上传文件到服务器,后台java解析,

使用NPOI将数据导出为word格式里的table

开发环境:VS2013+MySQL5.5+EF6+NPOI2.0.6 格式:WinForm+CodeFirst PS:vs2013的CodeFirst很方便了啊 CodeFirst方式就不再赘述了. 此Demo托管地址:http://git.oschina.net/uustudy/ExportImportWord.git 另外推荐下NPOI代码托管地址:https://github.com/tonyqus/npoi 作者博客:http://tonyqus.sinaapp.com/ 使用nuget

Json数据导出生成Excel

最近在做一个导入导出Excel的功能,导出其他类型的文件都比较熟悉,但是导入跟导出一个Excel还是稍微特殊点.根据这次的经验,写了个导出的小样例. 总体思路就是json数据的key,value跟Excel的行列转换,还有就是解决数据在Excel表格中存放的位置,区域问题. 这里要用到的两个小插件,一个是xslx.js,一个是FileSaver.js,前者是来处理生成Excel的,后者是用来把文件下载保存到本地的. 下载地址: https://github.com/eligrey/FileSav

生成word附件和word域动态赋值

生成word文档和word域动态赋值,很多时候需要生成这样的word文档供下载和打印,先制作一个包含了域的 word的模板附件,放在服务器端或者字节流存入数据库,以供需要的时候代码可以获取到,如: 其中右击每个域可以选择编辑域,修改域的名称: 获取到保存在数据库中的word模板内容: // DocAttachFile为数据库存放这个word附件的表对应的实体,通过这个实体类的content属性对应表的content字段获取到word的内容DocAttachFile docAttachFile =

如何在PowerDesigner将PDM导出生成WORD文档或者html文件

a)         使用PowerDesigner打开pdm文件 b)         点击Report Temlates 制作模板 点击PowerDesigner菜单栏“Report” -> “Report Templates” c)         选择模板数据项 完成步骤a),得到如下界面,左右2个区,Aavailable区域中选择你想要在WORD文档中展示的数据项,这里我们选择List of Tables,和List of Table Columns[数据表格信息] d)       

delphi 数据导出到word

procedure TFrmWeekAnalysisQry.BtnExportToExcelClick(Sender: TObject);var wordApp,WordDoc,WrdSelection:variant; strAdd:string; i,j,iRangeEnd,iStart,iEnd : integer; wdPar,wdRange:OleVariant; oShape, oChart,myCol: OleVariant; SumJHTonCount, SumWCTonCoun

Python脚本---把MySQL数据库表中的数据导出生成csv格式文件

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/45841221 #!/usr/bin/env python # -*- coding:utf-8 -*- """  Purpose: 生成日汇总对账文件  Created: 2015/4/27  Modified:2015/5/1  @author: guoyJoe""" #导入模块import MySQLdbimport timeimpo

Laravel生成Word文档 - phpword

在项目实际开发或学习中,会遇到把数据导出生成word文档的需求.这里就用优雅.流行的laravel框架,来简单的教大家实现. phpword,它可以很方便的实现word文档的生成,同时可以在word中添加表格.目录.图片.超链接.页眉.页脚等功能强大. 安装phpWord 要求 强制性: PHP 5.3.3+ XML解析器扩展 Zend \ Escaper组件 Zend \ Stdlib组件 Zend \ Validator组件 可选的: -邮编扩展 - GD扩展 - XMLWriter扩展 -