欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS Excel导出、ajax导出Excel

程序员文章站 2024-03-20 18:24:58
...

在这之前尝试了好几种的方法都不行,主要是因为参数拼不上URL所以导致不成功

var xhr = new XMLHttpRequest();
        xhr.open('get', 'http://localhost:8080/user/export', true);
        xhr.responseType = 'blob';
        xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
        xhr.onload = function () {
            if (this.status == 200) {
                var blob = this.response;
                var a = document.createElement('a');
                var url = window.URL.createObjectURL(blob);
                a.href = url;
                //设置文件名称
                a.download = '用户信息.xls';
                a.click();
            }
        }
        xhr.send(JSON.stringify({
           "type" : 1,
           "startDate" : "2018-01-01",
           "endDate" : "2018-12-31"
        }));
    }

其他几个方案就不说了,同样因为其中一个参数传的是对象导致URL拼接不成功

下面这个是我成功的案例

<button filter="main-sjcl"  onclick="downloadFile()" class="btn btn-rounded  btn-mint" style="float:left;">
  <i class="pli-down-4"></i>
  <span>导出</span>
</button>
function downloadFile() {//值班表导出
        if ($("#downloadFile").val().length < 1) {
            return layer.msg('请选择导出日期范围!');
        };
        if (onDutyVm.exportNameData == undefined) {
            return layer.msg('请选择导出部门!');
        };
        let currentUser = JSON.parse(sessionStorage.getItem('user'));
        let timeRange = $("#downloadFile").val().split(" - ");
        let url = ondutybase + '接口';
        let $eleForm = $("<form method='get'></form>");
        $eleForm.attr("action", url);
        $eleForm.append("<input name='acounts' type='hidden' value='" + JSON.stringify(onDutyVm.exportNameData) + "'>");
        $eleForm.append("<input name='dutyStartDate' type='hidden' value='" + timeRange[0] + "'>");
        $eleForm.append("<input name='dutyEndDate' type='hidden' value='" + timeRange[1] + "'>");
        $(document.body).append($eleForm);
        //提交表单,实现下载
        $eleForm.submit();
        $eleForm.remove();
    };

导出Excel文档弄好几天终于搞定了,如果只是传单个参数那就非常的好弄,但是其中的

JSON.stringify(onDutyVm.exportNameData)

是一个这样的东西

"["gylzwatch","wangchao","liangchangquan","songbin","chenyong","lijianrong","shenxuepeng","chenwenzhao","zengzhipeng","xiaojiake","tangyu"]"

所以拼接在URL上的时候成了这个样

let url = ondutybase + '接口?acounts='+"[object]"

导致URL不能直接成为下载的链接