【问题标题】:Unicode UTF-8 Dingbats are broken when a few but fine too manyUnicode UTF-8 Dingbats 在少数但很好太多时被破坏
【发布时间】:2015-06-23 19:34:50
【问题描述】:

您好,我正在尝试将我的 html 表格转换为 excel。一切都很好,除了在 excel 中,当有 20 个或更多时 dingbats 很好,但当少于 20 个时会损坏..

这是我的 javascript:

 $("#btnExport").click(function (e) {
    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="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]--></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]; }) }


    table = document.getElementById('table')
    var ctx = { worksheet: 'Table1' , table: table.innerHTML }

    var a = document.createElement('a');
    a.href = uri + base64(format(template, ctx))

    a.download = 'Excel.xls';
    a.click();
    e.preventDefault();
});

截图:

工作正常:

破碎:

dingbats 的价值观:(可以从here 看到)

&amp;#x2714;->✔&amp;#x2718->✘

【问题讨论】:

    标签: javascript excel html-table dingbats


    【解决方案1】:

    确定这完全可以在不将创建的 A 元素附加到某处的情况下工作吗?

    但是,为了支持 UFT-8,您应该将 &lt;meta charset="UTF-8"&gt; 添加到模板的 head 中。

     $("#btnExport").click(function (e) {
        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="http://www.w3.org/TR/REC-html40"><head> <meta charset="UTF-8"> <!--[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]; }) }
    
    
        table = document.getElementById('table')
        var ctx = { worksheet: 'Table1' , table: table.innerHTML }
    
        var a = document.createElement('a');
        a.href = uri + base64(format(template, ctx))
    
        a.download = 'Excel.xls';
    
        $("body").append(a);
    
        a.click();
        e.preventDefault();
    });
    

    见小提琴:https://jsfiddle.net/r5p6rmtb/

    【讨论】:

    • 没错!就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多