js导出excel

多的不说了直接上代码!

billList=[]//需要导出的数据数组,格式注意要和表头对应

function downloadExcel() {
    //console.log("returnBill==  "+billList);
    //自定义表头
    var aoas = [['月份', '水量', '总费用', '起码','止码','状态','水费单价','水费金额','污水费单价','污水费']];
    for(let i=0;i<billList.length;i++){
        let item = billList[i];
        let flag = item.rlpaidflag === 'N'?'未缴费':'已缴费';

        let rlsl = "";
        let waterDj = "";
        let waterJe = "";
        let wsDj = "";
        let wsJe = "";

        let recd = item.recdetail;
        if(recd.length>0){
            for(let j=0;j<recd.length;j++){
                let it = recd[j];
                rlsl = it.rdsl;
                if (it.piname == "水费") {
                    waterDj = it.rddj;
                    waterJe = it.rdje;
                }
                if (it.piname == "污水处理费") {
                    wsDj = it.rddj;
                    wsJe = it.rdje;
                }
            }
        }
        let aoa =[item.rlmonth,rlsl,item.rlje,item.rlscode,item.rlecode,flag,waterDj,waterJe,wsDj,wsJe];
        aoas.push(aoa);
    }
    var sheet = XLSX.utils.aoa_to_sheet(aoas);
    openDownloadDialog(sheet2blob(sheet,'sheet1'), '水费账单.xlsx');
}

// 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
function sheet2blob(sheet, sheetName) {
    sheetName = sheetName || 'sheet1';
    var workbook = {
        SheetNames: [sheetName],
        Sheets: {}
    };
    workbook.Sheets[sheetName] = sheet;
    // 生成excel的配置项
    var wopts = {
        bookType: 'xlsx', // 要生成的文件类型
        bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
        type: 'binary'
    };
    var wbout = XLSX.write(workbook, wopts);
    var blob = new Blob([s2ab(wbout)],{type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'}); // {type:"application/octet-stream"});
    // 字符串转ArrayBuffer
    function s2ab(s) {
        var buf = new ArrayBuffer(s.length);
        var view = new Uint8Array(buf);
        for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
        return buf;
    }
    return blob;
}

/**
 * 通用的打开下载对话框方法,没有测试过具体兼容性
 * @param url 下载地址,也可以是一个blob对象,必选
 * @param saveName 保存文件名,可选
 */
function openDownloadDialog(url, saveName) {
    //console.log("url == "+url);
    if(typeof url == 'object' && url instanceof Blob) {
        url = URL.createObjectURL(url); // 创建blob地址
        console.log("url == "+url);
    }
    var aLink = document.createElement('a');
    aLink.href = url;
    aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
    var event;
    if(window.MouseEvent){
        event = new MouseEvent('click');
    } else {
        event = document.createEvent('MouseEvents');
        event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    }
    aLink.dispatchEvent(event);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值