Не удается изменить имя файла при экспорте в Excel, он не поддерживает utf8 и имеет сообщение об ошибке при открытии - PullRequest
0 голосов
/ 04 декабря 2018

Использование приведенного ниже кода экспортирует таблицу HTML для «Двойного заголовка» и «CSS», поскольку это легко сделать с помощью этого кода, и DataTables не поддерживает эти функции, но у меня есть 3 проблемы.

  1. Я не могу изменить имя загруженного файла при экспорте, он всегда экспортируется с именем файла «download.xls».
  2. Он всегда отображает сообщение об ошибке при открытии при открытии файла Excel (пожалуйста, проверьтеизображение ниже)
  3. Он не поддерживает символы UTF8, например, не может отображать некоторые символы немецкого языка или евро в Excel.

enter image description here

Ниже приведен код, который я использую для экспорта.

var tableToExcel = (function() {
    var uri = 'data:application/vnd.ms-excel;base64,',
        template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="https://www.w3.org/TR/html401"><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]--></head><body><table>{table}</table></body></html>',
        base64 = function(s) {
            return window.btoa(unescape(encodeURIComponent(s)))
        },
        format = function(s, c) {
            return s.replace(/{(\w+)}/g, function(m, p) {
                return c[p];
            })
        }
    return function(table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
            worksheet: name || 'Worksheet',
            table: table.innerHTML
        }
        var blob = new Blob([format(template, ctx)]);
        var blobURL = window.URL.createObjectURL(blob);

        if (ifIE()) {
            csvData = table.innerHTML;
            if (window.navigator.msSaveBlob) {
                var blob = new Blob([format(template, ctx)], {
                    type: "text/html"
                });
                navigator.msSaveBlob(blob, '' + nothing + '.xlsx');
            }
        } else
            window.location.href = uri + base64(format(template, ctx))
    }
})()

function ifIE() {
    var isIE11 = navigator.userAgent.indexOf(".NET CLR") > -1;
    var isIE11orLess = isIE11 || navigator.appVersion.indexOf("MSIE") != -1;
    return isIE11orLess;
}

1 Ответ

0 голосов
/ 05 декабря 2018
  1. Здесь я решил проблему с именем файла. Теперь я могу загрузить файл с нужным именем, но все еще осталась проблема 2, plz.
...