How to export Datatables table to Excel which works in IE as well

前端 未结 1 837
面向向阳花
面向向阳花 2021-01-22 05:21

I am using

  var tableToExcel = (function() {
        var uri = \'data:application/vnd.ms-excel;base64,\'
        , template = \'

        
相关标签:
1条回答
  • 2021-01-22 06:16

    I used jspdf to get the desired results.Following points i achieved:-

    1) This works in all versions of IE.
    2) You can give the freeze column and freeze row options also in Excel
    

    .

    Libraries I used

    1)downloadify.js 
    2)swfobject.js
    3)downloadify.swf
    

    Functions i used

    1)getHtmlForExport(); // gives the html of the table to be exported.
    2)tableToExcel();// converts html code to Microsoft Excel specific XML code
    3)handleExcelExport();// downloads excel specific XML to excel file.
    
    
    var tableToExcel = function (table, horizontalFreezeRowNo, VerticalFreezeRowNo) {
        var worksheetString = '';
        //worksheet freeze pane options 
        worksheetString += '<x:WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"><x:Selected/><x:FreezePanes/><x:FrozenNoSplit/><x:ActivePane>2</x:ActivePane>';
        if (horizontalFreezeRowNo !== undefined)
            worksheetString += '<x:SplitHorizontal>' + horizontalFreezeRowNo + '</x:SplitHorizontal><x:TopRowBottomPane>' + horizontalFreezeRowNo + '</x:TopRowBottomPane>';
        if (VerticalFreezeRowNo !== undefined)
            worksheetString += '<x:SplitVertical>' + VerticalFreezeRowNo + '</x:SplitVertical><x:LeftColumnRightPane>' + VerticalFreezeRowNo + '</x:LeftColumnRightPane>';
    
        worksheetString += '</x:WorksheetOptions>';
    
        var 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>' + worksheetString + '</x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></head><body><table>{table}</table></body></html>'
    
        , format = function (s, c) {
            return s.replace(/{(\w+)}/g, function (m, p) {
                return c[p];
            })
        };
        if (!table.nodeType)
            table = document.getElementById(table)
        var ctx = {
            table: table.innerHTML
        }
        $("#exportTable").remove();
        return format(template, ctx)
    }
    
    function handleExcelExport(gridConfig) {
        $("." + gridConfig.objectID + "Export").downloadify({
            filename: function () {
                var elementClicked = this.el;
                var headerText = $(elementClicked).parents('.portlet').find('.portlet-title h8').text();
                var fileName;
                if (elementClicked == undefined || headerText == undefined) {
                    fileName = "excel"
                } else {
                    fileName = headerText.toString().trim()
                }
                return fileName + ".xls";
            },
            data: function () {
                var elementClicked = this.el;
    
                getHtmlForExport(elementClicked, gridConfig);
                return (tableToExcel('exportTable', 1, 1));// table id, horizontal freeze,vertical freeze 
            },
            onComplete: function () {
    
            },
            onCancel: function () {
    
            },
            onError: function () {
    
            },
            swf: 'resources/js/downloadify/downloadify.swf',
            downloadImage: 'resources/css/images/excelDownload.png',
            width: 65,
            height: 20,
            transparent: true,
            append: false
        });
    }  
    

    and for getHtmlForExport you have to write the logic to get the html of table you want to export .

    0 讨论(0)
提交回复
热议问题