在javascript上将jtable导出为ex​​cel

Ely*_*yor 8 javascript sql vb.net excel jquery-jtable

有很多方法可以将html表导出到excel,但是jtable怎么样,因为它不包含像<table>页面一样的html标签,它只是通过id来调用<div id="table"></div>

我有简单的解决方案,适用于Chrome,但不适用于IE

要导出的按钮:

<a id="dlink"  onclick="tableToExcel('StudentTableContainer', 'name', 'TestExcelFile.xls')">Export to excel</a>
Run Code Online (Sandbox Code Playgroud)

JTable的:

<div id="StudentTableContainer"></div>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

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="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]; }) }
    return function (table, name, filename) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }

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

    }
})()
Run Code Online (Sandbox Code Playgroud)
  • 我们可以在IE上使用吗?
  • 我们如何显示表格的所有值?(因为此解决方案仅导出页面上显示的行)

我使用vb.net来获取jtable的sql值

sbi*_*biz 1

为了导出所有行,您可以创建另一个不带分页的 jtable,仅在导出之前加载该 jtable,并且该 jtable 对最终用户不可见。应该是这样的:

$('#PersonTable').jtable({
    //...
    paging: false, //Set paging disabled
    actions: {
        //...
    },
    fields: {
        //...
    }
});
Run Code Online (Sandbox Code Playgroud)

获得完整的 jtable 后,您可以使用此论坛的解决方案将其导出。您可以在第二个 jtable 中仅指定要在 Excel 中导出的列。