Javascript代码解释-将多个html表导出到excel

Javascript代码解释-将多个html表导出到excel,javascript,html,excel,html-table,export-to-excel,Javascript,Html,Excel,Html Table,Export To Excel,有人能逐行向我解释(或引用链接)以帮助我理解如何将多个html表格导出到excel吗 我最初的问题是:如何将多个表导出到单独的工作表中(但有些表分组在一起)?例如表A、B、C、D。我希望将A和B放在一个工作表中,将C和D放在另一个工作表中,并将所有工作表打包在一个excel文件中 我在查看有关堆栈溢出的其他问题时,发现了一个与我的问题类似的问题(“如何将多个html表导出到excel?”dotnetN00b提出)。该问题的最佳答案是这样写的,以及html代码。我很难理解每一行都在做什么 如果有人

有人能逐行向我解释(或引用链接)以帮助我理解如何将多个html表格导出到excel吗

我最初的问题是:如何将多个表导出到单独的工作表中(但有些表分组在一起)?例如表A、B、C、D。我希望将A和B放在一个工作表中,将C和D放在另一个工作表中,并将所有工作表打包在一个excel文件中

我在查看有关堆栈溢出的其他问题时,发现了一个与我的问题类似的问题(“如何将多个html表导出到excel?”dotnetN00b提出)。该问题的最佳答案是这样写的,以及html代码。我很难理解每一行都在做什么

如果有人能向我解释它或重定向到一个网站,以帮助我了解我需要了解它,将不胜感激

Javascript和HTML代码的源代码:

脚本代码:

var tablesToExcel = (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="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets>'
    , templateend = '</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head>'
    , body = '<body>'
    , tablevar = '<table>{table'
    , tablevarend = '}</table>'
    , bodyend = '</body></html>'
    , worksheet = '<x:ExcelWorksheet><x:Name>'
    , worksheetend = '</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>'
    , worksheetvar = '{worksheet'
    , worksheetvarend = '}'
    , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) }
    , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }
    , wstemplate = ''
    , tabletemplate = '';

    return function (table, name, filename) {
        var tables = table;

        for (var i = 0; i < tables.length; ++i) {
            wstemplate += worksheet + worksheetvar + i + worksheetvarend + worksheetend;
            tabletemplate += tablevar + i + tablevarend;
        }

        var allTemplate = template + wstemplate + templateend;
        var allWorksheet = body + tabletemplate + bodyend;
        var allOfIt = allTemplate + allWorksheet;

        var ctx = {};
        for (var j = 0; j < tables.length; ++j) {
            ctx['worksheet' + j] = name[j];
        }

        for (var k = 0; k < tables.length; ++k) {
            var exceltable;
            if (!tables[k].nodeType) exceltable = document.getElementById(tables[k]);
            ctx['table' + k] = exceltable.innerHTML;
        }

        //document.getElementById("dlink").href = uri + base64(format(template, ctx));
        //document.getElementById("dlink").download = filename;
        //document.getElementById("dlink").click();

        window.location.href = uri + base64(format(allOfIt, ctx));

    }
})();
var tablesToExcel=(函数(){
var uri='data:application/vnd.ms excel;base64,'
,模板=“”
,body=''
,tablevar='{table'
,tablevarend='}'
,bodyend=''
,工作表=“”
,工作表趋势=“”
,worksheetvar='{工作表'
,工作表范围='}'
,base64=函数{return window.btoa(unescape(encodeURIComponent))}
,format=函数(s,c){返回s.replace(/{(\w+)}/g,函数(m,p){返回c[p];})}
,wstemplate=“”
,tabletemplate='';
返回函数(表、名称、文件名){
var表=表;
对于(变量i=0;i
HTML代码:

<html>
    <head>
        <title>JS to Excel</title>

    </head>
    <body>
        <table id="1">
            <tr><td>Hi</td></tr>
            <tr><td>Hey</td></tr>
            <tr><td>Hello</td></tr>
        </table>
        <table id="2">
            <tr><td>Night</td></tr>
            <tr><td>Evening</td></tr>
            <tr><td>Nite</td></tr>
        </table>

        <a id="dlink"  style="display:none;"></a>
        <input type="button" onclick="tablesToExcel(['1', '2'], ['first', 'second'], 'myfile.xls')" value="Export to Excel">
        <script src="~/Views/JS/JSExcel.js" type="text/javascript"></script>
    </body>
</html>

JS到Excel
你好
嘿
你好
夜
傍晚
黑夜

本质上,它是在HTML表格中循环,并构建与Excel兼容的XML,以Excel支持的格式表示表格。我看了原始问题,也看了代码,这不可能是跨浏览器兼容的。如果幸运的话,它可以在FireFox和Chrome上运行,但绝对不能在IE上运行


这是一个很好的解释,如果你真的需要一行一行的解释,我猜你可能需要先复习一下JavaScript,因为大部分代码都是在设置变量。“棘手”的部分是将浏览器重定向到base64编码的XML版本,并认为这将使浏览器相信它正在打开Excel文件。在我看来,这是一个不会跨浏览器的部分。

要用解释来解释这一点,你需要理解
JavaScript
。我已经将您的代码添加到了一个应该有帮助的列表中。