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

QQ登录

只需一步,快速开始

查看: 6580|回复: 3

[处理中3] EXCEL 下载

[复制链接]

263

主题

733

帖子

1978

积分

金牌会员

Rank: 6Rank: 6

积分
1978
QQ
发表于 2018-9-4 14:44:47 | 显示全部楼层 |阅读模式
需求是这样:一个主表对应四个子表,组装成一个EXCEL,有四个Sheet
打算使用.j的方式下载,希望是在.j文件获取表,然后组装数据后写入EXCEL,然后在下载,应该怎么做?
这个是下载页面的方法:
Model.prototype.exportExcelBtnClick = function(event){        //导出信息
                var fileName = "质量信息管理.xlsx";
                // 这个案例中为了下载时能给出文件名,自定义了一个.j用于执行下载的get请求,.j请参考"$UI/demo/actions/process/invokeAction/downloadFile.j"
                // 提交前需要进行URL转换,在URL上补足bsessionid等必要信息
                var url = require.toUrl("$UI/inforGather/infor/process/infor/downloadFile.j?bsessionid=" + this.getContext().getBSessionID());
                // 用get方式传参
                url = url
                        + "&process=" + this.getContext().getCurrentProcess()
                        + "&activity=" + this.getContext().getCurrentActivity()
                        + "&executor=" + this.getContext().getExecutor()
                        + "&action=downloadFile"
                        + "&fileName=" + fileName;
                // 弹出下载
                window.open(url);
        };

这个是.j文件
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                String fileName = request.getParameter("fileName");
       
                // 构造动作对象
                Action action = new Action();
                action.setProcess(request.getParameter("process"));
                action.setActivity(request.getParameter("activity"));
                action.setName(request.getParameter("action"));
                action.setExecutor(request.getParameter("executor"));
                action.setParameter("fileName", request.getParameter("fileName"));
               
                String bSessionID = NetUtils.getBSessionID(request);
                String language = NetUtils.getLanguage(request);
               
                // 在返回的头部信息中,指定以附件方式下载,并指定文件名
                response.addHeader("Content-disposition", "attachment;filename=\"" + java.net.URLEncoder.encode(fileName, "UTF8") + "\";");

                // 调用动作
                ActionEngine.invokeAction(action,
                        ActionUtils.BINARY_CONTENT_TYPE,         // 返回数据格式
                        bSessionID,                                                 // bsessionid是必须的
                        language,                                                         // 语言
                        new StreamCallback(response)                // 以流的方式返回
                );

}

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36198
发表于 2018-9-4 15:08:43 | 显示全部楼层
定义action,可以在action对应的代码中获取数据,然后自己创建excel文件,往excel文件中写数据(创建文件和操作excel都是java标准的可以到网上查找)
然后前端下载,下载可以参考/UI2/demo/actions/process/invokeAction/mainActivity.w中的实现

如果都用.j操作,.j中获取数据还是需要调用action,或者用jdbc标准的方式连接数据库获取数据,然后自己创建excel文件,往excel文件中写数据(创建文件和操作excel都是java标准的可以到网上查找)
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

263

主题

733

帖子

1978

积分

金牌会员

Rank: 6Rank: 6

积分
1978
QQ
 楼主| 发表于 2018-9-4 16:01:54 | 显示全部楼层
呵呵,你这回复,我只看到网上查找几个字。等于没说。
这个是获取流的action:
public static InputStream xxExportExcel(String fileName) throws Exception{
                logger.info("导出EXCEL");       
                HSSFWorkbook workbook = new HSSFWorkbook();      
                InforExcelService inforExcelService = new InforExcelService();
                InputStream in = inforExcelService.export();
                return in;
        }
报错:
Caused by: java.lang.ClassNotFoundException: 模块"/inforGather/infor/logic/code"中找不到类"org.apache.poi.hssf.usermodel.HSSFWorkbook"
jar包都没问题,JAVA也没报编译错误,看这意思,应该是要在model.config.xml中加个配置吧
怎么加?
这个类是属于哪个模块的?我怎么知道哪个是公共的模块?
如果自己导入了一个jar,是不是也要增加这个配置?
让我们自己增加这么一个配置有什么意义?
为什么要做限制?只怕就是为了耗费开发的时间的吧


回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36198
发表于 2018-9-4 16:13:34 | 显示全部楼层
1.创建文件,操作excel本来就是java标准的,平台不会去控制也不会提供这样的API
2.jar包是在code同级的lib下放的吗?构建路径中添加了吗?
3.这个是poi的jar中的,平台默认的/BIZ/SA/excel/logic/code/lib下提供的有,如果要用平台默认提供的jar,可以在自己的模块的model.config.xml中引用/SA/excel/logic/code
如果用平台提供的导出组件,同时导出主从可以参考http://bbs.wex5.com/forum.php?mod=viewthread&tid=50706
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-25 22:31 , Processed in 0.056634 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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