【问题标题】:How to export Datatables table to Excel which works in IE as well如何将 Datatables 表导出到也适用于 IE 的 Excel
【发布时间】:2014-11-20 12:19:32
【问题描述】:

我正在使用

  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]--><meta http-equiv="content-type" content="text/plain; charset=UTF-8"/></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, fileName) {
            if (!table.nodeType) table = document.getElementById(table)
            var ctx = {
                worksheet: fileName || 'Worksheet', 
                table: table.innerHTML
            }
            $("<a id='dlink'  style='display:none;'></a>").appendTo("body");
                document.getElementById("dlink").href = uri + base64(format(template, ctx))
                document.getElementById("dlink").download = fileName;
                document.getElementById("dlink").click();
        }
    })();

用于将数据表导出到 excel,它在 chrome 和 firefox 中都可以正常工作。但是它给了

传递给系统调用的数据区域太小。

所有 IE 版本中的错误。请给我一些解决方法来解决这个问题,或者建议任何适用于所有浏览器的新方法。我从昨天开始就在谷歌上搜索,但一切都是徒劳的...... 任何帮助将不胜感激..谢谢

:编辑我已经尝试过downloadify.js,文件保护程序,但对我没有用。

【问题讨论】:

  • 是的,我已经看到了这个问题,但没有得到任何结果。这就是我在这里发帖的原因。
  • 与链接状态一样,该错误是由于 IE 存储 URI 方式的限制(即旧版本的数据容量有限)。如果您需要支持旧的 IE 版本,那么您必须以旧方式执行此操作并创建 Excel 服务器端。
  • 是的,现在我正在使用 downloadify 进行服务器端下载。任何 IE 版本都不支持上面的代码..我使用的是 IE 11...

标签: javascript jquery jquery-datatables export-to-excel


【解决方案1】:

我使用 jspdf 来获得想要的结果。我实现了以下几点:-

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

.

我使用的库

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

我使用的功能

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

对于 getHtmlForExport,您必须编写逻辑来获取要导出的表格的 html。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2021-08-02
    • 2014-05-07
    相关资源
    最近更新 更多