Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Export jtable to excel in javascript on IE

There are many ways to export html table to excel, but what about jtable as it does not contain html tags like <table> in the page, it just calls by id like <div id="table"></div>

I have simple solution which is working on Chrome, but not working on IE

Button to export:

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

Jtable:

<div id="StudentTableContainer"></div>

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();

    }
})()
  • Can we make it to use on IE?
  • How can we display all the values of the table? (as this solution exports only displayed rows on the page)

I am using vb.net to get the sql values for jtable

like image 426
Elyor Avatar asked May 26 '15 05:05

Elyor


1 Answers

In order to have all the rows exported you can create another jtable without paging that you load only before exporting and which is invisible to the end user. Should be something like:

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

After you have the full jtable you can export it with the solution from this forum. You can specify in this second jtable only the columns that you want to export in excel.

like image 184
sbiz Avatar answered Sep 20 '22 11:09

sbiz