问题
I am using
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();
}
})();
for exporting datatables to excel and it works fine in both chrome and firefox. however it gives
The data area passed to a system call is too small.
error in all IE versions. Please give me some workaround as how to solve this problem or suggest any new method that works in all browsers. I am googling about the same since yesterday but all in vain... Any help would be apperciated .. thanks
:Edit i have tried downloadify.js, filesaver but didn't worked for me .
回答1:
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 .
来源:https://stackoverflow.com/questions/27039474/how-to-export-datatables-table-to-excel-which-works-in-ie-as-well