У меня есть следующая функция, используя этот я экспортирую свой html в файл Csv. Несколько дней / месяцев назад он отлично работал в браузере google chrome (все еще работает отлично в FF) . теперь он внезапно перестает работать для преобразования данных в формат csv.
когда я нажимаю кнопку экспорта , я могу загрузить файл, но когда я пытаюсь открыть в ms excel / Libre office calc, он не открывается в нем.
Я могу видеть даже экспортированные данные, но его отображение такое же, как и разделенное.
может ли кто-нибудь предложить мне, что происходит с моим кодом в браузере Chrome Chrome.
function exportReportTableToCSV($table, filename) { var dumpd=''; var csvData =''; $table.each(function(){ var $rows = $(this).find('tr:has(td)'); var $header = $(this).find('tr:has(th)'); tmpColDelim = String.fromCharCode(11), // vertical tab character tmpRowDelim = String.fromCharCode(0), // null character colDelim = '","', rowDelim = '"\r\n"', csv = '"' + $header.map(function (i, head) { var $head = $(head), $cols = $head.find('th'); return $cols.map(function (j, col) { var $col = $(col), text = $col.text(); if(text == " ") text = ""; if(text == "PROGRAMS") text = ""; console.log(text); return text.replace('"', '""'); }).get().join(tmpColDelim); }).get().join(tmpRowDelim) .split(tmpRowDelim).join(rowDelim) .split(tmpColDelim).join(colDelim) + '"' ; csv+='\r\n'; csv+= '"' + $rows.map(function (i, row) { var $row = $(row), $cols = $row.find('td'); return $cols.map(function (j, col) { var $col = $(col); var text; if($($(col)).find("input:checkbox").length > 0) text = $($(col)).find("input:checkbox").prop('checked') ? 'Yes' : 'No'; else text = $col.text(); if(text === "") { text = ""; } return text.replace('"', '""'); }).get().join(tmpColDelim); }).get().join(tmpRowDelim) .split(tmpRowDelim).join(rowDelim) .split(tmpColDelim).join(colDelim) + '"'; dumpd+=csv+"\n\n"; }); csvData ='data:application/csv;charset=utf-8,' + encodeURIComponent(dumpd); $(this) .attr({ 'download': filename, 'href': csvData, 'target': '_blank' }); }
после выполнения еще нескольких исследований я получил решение для этого.
я изменил это
var csvData ='data:application/csv;charset=utf-8,' + encodeURIComponent(dumpd); $(this) .attr({ 'download': filename, 'href': csvData, 'target': '_blank' });
к
var csvData = new Blob([dumpd], { type: 'text/csv' }); //new way var csvUrl = URL.createObjectURL(csvData); $(this) .attr({ 'download': filename, 'href': csvUrl });
и он работал нормально. кажется, что хром в новой версии что-то изменил.
Надеюсь, это поможет другим.