s-HR导出excel方式二

摘要:
ie[1]:(ie11?11:(ieEDGE?

js代码:

exportToExcelAction:function(){
        var billId = _self.getCurrentModelID();
        billId = encodeURIComponent(billId);
        var url = shr.getContextPath() + "/dynamic.do?handler=com.kingdee.eas.custom.dfxw.pssf.handler.AFOwnBaseAdjustEditHandler&method=exportToExcel&billId=" + billId;
        var sbjndw = $("#sbjndw").text();
        var rq = new Date().format("yyyyMMdd");
        this.download(url, sbjndw+"公积金个人基数调整"+rq+".xls");
    },
    /*文件字节流下载*/
    download: function (url, fileName) {
        var xhr = new XMLHttpRequest();
        xhr.open('post', url, true); // 也可以使用POST方式,根据接口
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.responseType = "blob"; // 返回类型blob
        // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑
        xhr.onload = function () {
            // 请求完成
            if (this.status === 200) {
                // 返回200
                var blob = this.response;
                
                var reader = new FileReader();
                if(this.response.type == 'application/json'){
                    reader.readAsText(blob); // 转换为base64,可以直接放入a表情href
                    reader.onload = function (e) {
                        var data = JSON.parse(e.target.result);
                        var result = data.result;
                        var a = JSON.parse(data.data);
                        if(result == "success"){
                            shr.showError({
                                            message: JSON.stringify(a.errmsg)
                                        });
                        }
                    }
                }else{
                    const ie = navigator.userAgent.match(/MSIEs([d.]+)/),
                    ie11 = navigator.userAgent.match(/Trident/7.0/) && navigator.userAgent.match(/rv:11/),
                    ieEDGE = navigator.userAgent.match(/Edge/g),
                    ieVer = (ie ? ie[1] : (ie11 ? 11 : (ieEDGE ? 12 : -1)));
                console.log('ie:' + ie);
                console.log('ieVer:' + ieVer);
                if (ieVer > -1) {
                    window.navigator.msSaveBlob(blob, fileName);
                }else{
                    reader.readAsDataURL(blob); // 转换为base64,可以直接放入a表情href
                    reader.onload = function (e) {
                        // 转换完成,创建一个a标签用于下载
                        var a = document.createElement('a');
                        a.download = fileName;
                        a.href = e.target.result;
                        $("body").append(a); // 修复firefox中无法触发click
                        a.click();
                        $(a).remove();
                    }
                }
                    
                }
                
            }
        };
        // 发送ajax请求
        xhr.send(null);
    },

handler代码:

 1 public void exportToExcelAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap)
 2       throws SHRWebException{
 3         System.out.println("exportToExcel");
 4         Context ctx = SHRContext.getInstance().getContext();
 5         String id = request.getParameter("billId");
 6         
 7         String[] head = {"序号","员工","公积金缴纳单位","编码","工资","入集团时间","原公积金规则-原基数规则名称","原公积金规则-原基数种类名称","原公积金规则-原基数","现申请公积金规则-拟调基数","申请原因","生效期间"};
 8         
 9         String[] fields = {"seq","person","ncUnit","personnumber","salary","joinDate","oldBaseName","oldBaseType","oldBase","newBase","description","usePeriod"};
10         StringBuffer sql = new StringBuffer();
11 
12         sql.append("/*dialect*/select entry.fseq seq,zy.fname_l2 person,nc.fname_l2 ncUnit,zy.fnumber personnumber,cfsalary salary,to_char(cfjoinDate,'yyyy-MM-dd') joinDate, ");
13         sql.append("brule.fname_l2 oldBaseName,case when cfoldBaseType=1 then '固定' when cfoldBaseType=2 then '分档' when cfoldBaseType=2 then '去年平均工资' else '上月应发工资' end oldBaseType, ");
14         sql.append("cfoldBase oldBase,cfnewBase newBase,entry.fdescription description,to_char(cfusePeriod,'yyyy-MM-dd') usePeriod ");
15         sql.append("from CT_PSS_AFOwnBaseAdjustentry entry ");
16         sql.append("left join CT_BD_NCywdyjczl nc on entry.cfncunitid=nc.fid  ");
17         sql.append("left join CT_PSS_FundBaseRule brule on entry.cfoldbasenameid=brule.fid ");
18         sql.append("left join T_BD_Person zy on entry.fpersonid=zy.fid  ");
19         sql.append("where fbillid ='"+id+"' order by entry.fseq ");
20         
21         //遍历数据,生成一张分录excel
22         HSSFWorkbook wb = new HSSFWorkbook();
23         HSSFCellStyle cellStyle = wb.createCellStyle();
24         DataFormat format = wb.createDataFormat();
25         cellStyle.setDataFormat(format.getFormat("#,##0.00"));//金额字段格式
26         HSSFSheet sheet = wb.createSheet("数据表");
27         Row row = null;
28         Cell cell = null;
29         row = sheet.createRow(0);
30         for(int i=0;i<head.length;i++){
31             cell = row.createCell(i);
32             cell.setCellValue(head[i]);
33         }
34         int rowIndex = 1;
35         try {
36             IRowSet rs = DbUtil.executeQuery(ctx, sql.toString());
37             while (rs.next()) {
38                 Row tempRow = sheet.createRow(rowIndex);
39                 for(int i=0;i<fields.length;i++){
40                     Cell tempCell = tempRow.createCell(i);
41                     if(i==0){
42                         tempCell.setCellValue(rs.getInt(fields[i]));
43                     }else if((i==4 || i==8 && i==9)){
44                         tempCell.setCellStyle(cellStyle);
45                         tempCell.setCellValue(rs.getDouble(fields[i]));
46                     }else{
47                         tempCell.setCellValue(rs.getString(fields[i]));
48                     }
49                 }
50                 rowIndex++;
51 
52             }
53             String fileName = "数据表.xls";
54             response.setContentType("application/vnd.ms-excel");
55             response.setHeader("Content-Disposition", "attachment;filename="" + fileName+""");
56             OutputStream out = response.getOutputStream();
57             wb.write(out);
58             out.flush();
59             out.close();
60         } catch (BOSException e) {
61             System.out.println(e.getMessage());
62         } catch (SQLException e) {
63             System.out.println(e.getMessage());
64         } catch (IOException e) {
65             System.out.println(e.getMessage());
66         }
67     }

免责声明:文章转载自《s-HR导出excel方式二》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Google Guava之简化异常和错误的传播与检查Flink 源码(二): Flink Client 实现原理与源码解析(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ajax发送请求下载字节流形式的excel文件

背景 开发项目中导出功能,因为数据量有点大,所以导出可能需要时间有点长,所以想用ajax异步请求。 存在问题 利用传统的js和jquery提供的ajax相关获取响应的方式是无法实现excel文件下载的。 js的XMLHttpRequest对象提供了responseText和responseXML两个属性,获取的是html和xml文件格式,没有提供二进制流获...

Oracle中的BLOB和CLOB【转载】

原文地址:http://jelly.iteye.com/blog/65796 一、区别和定义       LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列   LONG RAW: 可变长二进制数据,最长2G  CLOB:  字符大对象Clob 用来存储单字节的字符数据   NCLOB:...

Oracle 20c 新特性:原生的 JSON 数据类型(Native JSON Datatype)

墨墨导读:Oracle 在 12c(12.1.0.2)版本中引入了对JSON的支持,允许将JSON存储在数据库中的varchar2或LOB(CLOB或BLOB)中。这意味着,我们可以利用无模式设计模型所提供的灵活性来构建应用程序,但又能从Oracle数据库的强大功能中受益。 Oracle 在 12c(12.1.0.2)版本中引入了对JSON的支持,允许将...

【JS】前端文件下载(无刷新)方法总结

#传统方法 利用iframe 或 form.submit 或 windows.open直接向后端发请求,后端返回文件流,后端处理成功后会直接返回到页面,浏览器会整理并打开自己的保存下载文件机制 。 1、利用form.submit直接向后端提交,后端返回文件流 1)前端代码: 1 var downloadURL = "RestHandle.ashx"; 2...

5-URL.createObjectURL()的使用方法

官方说明问文档 URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。 URL.createObjectURL(blob)和FileReader.rea...

Mysql数据类型

MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 1.数值类型 MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、...