Таблица html, основанная на стиле экспорта, чтобы превзойти в angular предупреждение о поврежденном файле - PullRequest
0 голосов
/ 01 февраля 2020

Я экспортирую файл Excel в angular, который содержит стили цвета шрифта. Данные успешно экспортируются. Тем не менее, я получаю ниже предупреждение об открытии файла.

enter image description here

Я прошел через несколько ссылок переполнения стека, но не смог найти никакого решения. Пожалуйста, проверьте код ниже для экспорта в используемый метод Excel.

exportTableToExcel(table, sheetName, fileName) {
    var reportName = this.editQueryData.QueryName.replace(/\s/g, "");
    reportName = reportName.replace(/[^\w\s]/gi, "");
    let sysDate = new Date();
    var currentDate = moment(sysDate).format("DD-MM-YYYY_h-mm-ss");
    fileName = reportName+'-'+currentDate;

    let thd = $('#' + table).find('thead'), tbd = $('#' + table).find('tbody'), tbl = `<table id="_temp_table_for_export_to_excel" class="_temp_table_for_export_to_excel" style="color:black !important"><!--<caption>Exported Data</caption>-->
    ${$(thd)[0].outerHTML}${$(tbd)[0].outerHTML}</table>`;
    //console.log(tbl);
    $('body').append(tbl);
    $('#_temp_table_for_export_to_excel thead th.notExportCsv, #_temp_table_for_export_to_excel tbody td.notExportCsv').remove();

    table = '_temp_table_for_export_to_excel';
    var style = `<style>
      .redClr { background-color: #ff8989; }
      .greenClr { background-color: #8dc572; }
      .blueClr { background-color: blue; }
      .orangeClr { background-color: #ffc65c; }
      .color_red { color: red !important; }
      .color_orange { color: orange !important; }
      .color_green { color: green !important; }
      </style>`;
    var uri = 'data:application/vnd.ms-excel;base64,',
      templateData = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->' + style + '</head><body><table>{table}</table></body></html>',
        base64Conversion = function (s) { return window.btoa(unescape(encodeURIComponent(s))) },
        formatExcelData = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }

    if (!table.nodeType)
        table = document.getElementById(table)

    var ctx = { worksheet: sheetName || 'Worksheet', table: table.innerHTML }

    var element = document.createElement('a');
    element.setAttribute('href', 'data:application/vnd.ms-excel;base64,' + base64Conversion(formatExcelData(templateData, ctx)));
    element.setAttribute('download', fileName + '.xls');
    element.style.display = 'none';
    document.body.appendChild(element);
    element.click();
    document.body.removeChild(element);
    $('._temp_table_for_export_to_excel').remove();
  }

Пожалуйста, дайте мне знать, где я делаю ошибку в своем коде и как я могу решить эту проблему.

Большое спасибо

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