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不能直接成爲下載的鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章