Как включить ответ в файл Excel - PullRequest
0 голосов
/ 19 сентября 2018

Я отправляю запрос на сервер, затем получил ответ, но я не уверен, как превратить этот ответ в файл Excel.

Заголовок ответа:

Connection →keep-alive
cache-control →no-cache, no-store, max-age=0, must-revalidate
content-disposition →attachment; filename=demo.xls
content-length →7680
content-type →application/vnd.ms-excel
date →Wed, 19 Sep 2018 14:40:47 GMT
expires →0
pragma →no-cache
server →Apache
x-content-type-options →nosniff
x-frame-options →DENY
x-xss-protection →1; mode=block

Данные ответа:

��ࡱ�; �� ��������������������RootEntryрабочая тетрадь�� ��A���Pm \ pmidadm B�a = ��� = h: � # 8X @ � "��1���Arial1���Arial1�RialArial1���Arial1���Calibri1���Calibri1���Calibri "$" #, ## 0 _); ("$" #, ## 0) "$" #, ## 0 _); красный "$ "#, ## 0,00 _); (*" - "?? ); (@ ) � #. ## 0� #, ## 0.000� [$ -1009] мммм д, гггг; @ � _ ($ *

, ## 0,00_) ��� � ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� ��� �� �� �� ��� ��� �� �� �� ��� ��� ��� �� ��� �� �101

� + �� �� �) �� �� �, �� �� � * �� �� � �� �� � �! � � � � � � � � �� ��� � �� # � ��! � �� # � � # � ������������������`�Demo

Вот что я попробовал:

var blob = new Blob([result.data], 
      {
        'type': 'application/vnd.ms-excel',
      }    
)
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'demo.xls';
document.body.appendChild(link);

link.click();

Однако, когда я открываю файл, он имеет ошибку и не может открыть его.

Любая помощь?Спасибо,

1 Ответ

0 голосов
/ 19 сентября 2018

Загрузить ответ сервера в виде буфера массива.Сохраните его как BLOB-объект, используя тип содержимого с сервера (которым должно быть приложение / vnd.openxmlformats-officedocument.spreadsheetml.sheet):

var httpPromise = this.$http.post(server, postData, { responseType: 'arraybuffer' });
httpPromise.then(response => this.save(new Blob([response.data],
    { type: response.headers('Content-Type') }), fileName));

Сохраните BLOB-объект на устройстве пользователя:

save(blob, fileName) {
    if (window.navigator.msSaveOrOpenBlob) { // For IE:
        navigator.msSaveBlob(blob, fileName);
    } else { // For other browsers:
        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = fileName;
        link.click();
        window.URL.revokeObjectURL(link.href);
    }
}

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...