起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3574|回复: 3

[结贴] weX5 如何实现导出Excel并弹出下载框,另存文件到客户端

[复制链接]

4

主题

9

帖子

115

积分

初级会员

Rank: 2

积分
115
QQ
发表于 2018-11-6 18:15:04 | 显示全部楼层 |阅读模式
本帖最后由 QlikView 于 2018-11-6 18:23 编辑

目前使用weX5 制作纯PC端 web 应用,涉及导出文件功能。
求教weX5 如何实现导出Excel并弹出下载框,另存文件到客户端。使用如下方法,浏览器不会弹出下载框。


前台调用方法如下:
//导出Excel
        Model.prototype.exportClick = function(event){
                justep.Baas.sendRequest({
                        "url" : "/test/exportTest",
                        "action" : "exportExcel",
                        "params" : {
                        },
                        "success" : function(data) {
                        }
                });
        };


后台使用JAVA POI导出Excel方法,后台代码如下:

//导出Excel
                public static JSONObject exportExcel(JSONObject params, ActionContext context) throws SQLException, NamingException, ClassNotFoundException, java.sql.SQLException, UnsupportedEncodingException {
                        System.out.println("开始导出");
                        HttpServletResponse res = (HttpServletResponse)(context.get(ActionContext.RESPONSE));
                        //文件名(可根据传递来的参数设置)
                        Connection conn = context.getConnection(DATASOURCE_Novartis);
                        /*连存储过程:包名.包体名*/
                        CallableStatement proc = conn.prepareCall("{call sp_exportTest}");
            /*执行*/
            ResultSet rs = proc.executeQuery();
                String fileName = "test";
                ExcelUtil util = new ExcelUtil();
                try {
                                util.downLoad(res, fileName, rs);
                        } catch (Exception e) {
                                // TODO 自动生成的 catch 块
                                e.printStackTrace();
                        }
               /* try {
                                util.downLoad(res,fileName, rs);
                        } catch (IOException e) {
                                // TODO 自动生成的 catch 块
                                e.printStackTrace();
                        }*/
                        return null;        
                }

/*下载Excel文件*/
        public void downLoad(HttpServletResponse response,String fileName,ResultSet rs) throws IOException {
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                try {
                        this.createExcel(fileName, rs).write(os);
                } catch (IOException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                }
                byte[] content = os.toByteArray();
        InputStream is = new ByteArrayInputStream(content);
        // 设置response响应头弹出下载框
        response.reset();
        response.setContentType("application/x-execl;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xlsx").getBytes(), "iso-8859-1"));
        ServletOutputStream out = response.getOutputStream();
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(is);
            bos = new BufferedOutputStream(out);
            byte[] buff = new byte[2048];
            int bytesRead;
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
        } catch (final IOException e) {
            throw e;
        } finally {
            if (bis != null)
                bis.close();
            if (bos != null)
                bos.close();
        }
        }

        /*创建Excel文件*/
        public SXSSFWorkbook createExcel(String fileName,ResultSet rs){
                // 创建一个Excel文件 每1000条写一个临时文件
                SXSSFWorkbook workbook = new SXSSFWorkbook (1000);
                // 创建一个工作表
        Sheet sheet = workbook.createSheet("test");
        // 添加表头行
        Row row = sheet.createRow(0);
                try {
                        ResultSetMetaData m = rs.getMetaData();
                        int columns=m.getColumnCount();
                // 遍历添加表头内容
                for(int i=1;i<=columns;i++){
                            Cell cell = row.createCell(i-1);
                            cell.setCellValue(m.getColumnName(i));
                }
                int j = 1;
                // 遍历添加数据内容
               while(rs.next()){
                       row = sheet.createRow(j);
                       j++;
                    for(int i=1;i<=columns;i++){
                            Cell cell = row.createCell(i-1);
                    cell.setCellValue(rs.getString(i));   
                     }
               }
              /* FileOutputStream os = new FileOutputStream(path+fileName+".xlsx");
               workbook.write(os);
               os.close();*/
               System.out.println("写入Excel完成");
                } catch (SQLException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                }
                return workbook;
        }



发表于 2018-11-7 13:41:15 | 显示全部楼层
平台没有提供参考案例
需要自己实现,论坛搜下其他人做的参考下吧
http://bbs.wex5.com/forum.php?mod=viewthread&tid=114140           
http://bbs.wex5.com/forum.php?mod=viewthread&tid=118267

或者自己上网搜下
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

4

主题

9

帖子

115

积分

初级会员

Rank: 2

积分
115
QQ
 楼主| 发表于 2018-11-7 17:41:19 | 显示全部楼层
liangyongfei 发表于 2018-11-7 13:41
平台没有提供参考案例
需要自己实现,论坛搜下其他人做的参考下吧
http://bbs.wex5.com/forum.php?mod=view ...

前台按钮点击事件
Model.prototype.onClickExportExcel = function(event){
                var row = this.comp("assertCheckScheduleData").getFirstRow();
                var rp_id = row.val("rp_id");
                //导出 excel
                window.location.href="/baas/lam/processrequest/exportExcel?rp_id="+rp_id;
        };
其中/processrequest/exportExcel  是指对应baas后台中service文件中对应的action方法
方法后 问题解决。
谢谢
回复 支持 反对

使用道具 举报

0

主题

13

帖子

135

积分

初级会员

Rank: 2

积分
135
QQ
发表于 2021-5-16 22:28:21 | 显示全部楼层
本帖最后由 lwlkzx 于 2021-5-16 22:29 编辑

费了九牛二虎之力,终于成功。这是论坛中最好的一个方法。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-27 10:55 , Processed in 0.083220 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表