JS Excel传参导出、ajax传参导出Excel

在这之前尝试了好几种的方法都不行,主要是因为参数拼不上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不能直接成为下载的链接

发布了15 篇原创文章 · 获赞 2 · 访问量 601

猜你喜欢

转载自blog.csdn.net/weixin_43728978/article/details/103487403
今日推荐