столкнулись с проблемой при экспорте массива java скриптов в Excel - PullRequest
0 голосов
/ 26 мая 2020

Я могу экспортировать массив javascript в csv, но при изменении расширения файла на xslx.

Пожалуйста, дайте мне знать, в чем может быть проблема при изменении расширения на xslx.

пожалуйста, найдите фрагмент кода, работающий для csv, а не для xslx.

function Export2Excel(data) {
        var tempCSVNumber = 0;

        var CSVData = [];
        var str = '';
         $("#ddlFilterlist > option").each(function () {
                str += '"' + this.value + '",';
        });

        CSVData.push(str);

        for (var i = tempCSVNumber; i <= data.length - 1; i++) {
            var item = data[i];
            var csvVal = '';
            var hString = str .substring(0, str .length - 1);
            result = hString
                .split(',')
                .map(key => {
                    var val = item[key.toUpperCase()
                        .replace(/"/g, '')];
                     csvVal += '"' + val + '",';
                     return csvVal;
                })

            CSVData.push(csvVal);
        }


            var CSVFileName = 'Test.xlsx';


        var csvData = CSVData.join("\n");
        if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Edge") != -1) || (!!document.documentMode == true)) {

                blob = new Blob([csvData], {
                    //"type": "text/csv;charset=utf8;"
                    //"type": "application/octet-stream;" 
                    //"type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                    //"type":"application/vnd.ms-excel;"
                    "type": "data:application/vnd.ms-excel;"
                    //data: attachment / xlsx
                });

            if (navigator.msSaveBlob) { // IE 10+
                navigator.msSaveBlob(blob, CSVFileName);
            }
        }
        else {

                var blob = new Blob([csvData],
                    //{ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
                    //{ type: "application/octet-stream" });
                   // { type: 'text/csv;charset=utf8;' });
                   // { type: "data:attachment/xlsx;" });
                { type: 'data:application/vnd.ms-excel' });
        }

            var csvUrl = URL.createObjectURL(blob);
            var link = document.createElement("a");
            link.setAttribute("href", csvUrl);
            link.setAttribute("download", CSVFileName);
            link.setAttribute("target", '_blank');
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            if (link.click !== undefined)
                link.click();
            else if (document.createEvent) {
                var eventObj = document.createEvent('MouseEvents');
                eventObj.initEvent('click', true, true);
                link.dispatchEvent(eventObj);
            }
            document.body.removeChild(link);
        }

    }

Я попытался изменить разные типы данных blob, но он не работает.

вот ошибка при попытке открыть загруженный xslx файл enter image description here

1 Ответ

0 голосов
/ 26 мая 2020

Я пробовал это, передавая массив объектов. У меня это сработало. В виде строк отправляю список выбранных массивов объектов.

exportToCsv(filename: string, rows: object[]) {
    if (!rows || !rows.length) {
      return;
    }
    const separator = ',';
    const keys = Object.keys(rows[0]);
    const csvData =
      keys.join(separator) +
      '\n' +
      rows.map((row: any) => {
        return keys.map(k => {
          let cell = row[k] === null || row[k] === undefined ? '' : row[k];
          cell = cell instanceof Date
            ? cell.toLocaleString()
            : cell.toString().replace(/"/g, '""');
          if (cell.search(/("|,|\n)/g) >= 0) {
            cell = `"${cell}"`;
          }
          return cell;
        }).join(separator);
      }).join('\n');

    const blob = new Blob([csvData], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
      navigator.msSaveBlob(blob, filename);
    } else {
      const link = document.createElement('a');
      if (link.download !== undefined) {
        // Browsers that support HTML5 download attribute
        const url = URL.createObjectURL(blob);
        link.setAttribute('href', url);
        link.setAttribute('download', filename);
        link.style.visibility = 'hidden';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...