概述
使用dataTable的excelHhtml5按鈕插件做導出excel時,需要自定義數據格式,官方提供了67種數據格式可以選用,詳見:https://datatables.net/reference/button/excelHtml5,但如果都不符合業務要求,則需要自定義數據格式,比如百分比保留兩位小數,就需要修改buttons.html5.js源碼,本文選用DataTables-1.10.15版本包裏的buttons.html5.js,並以增加百分比保留兩位小數爲例來說明。
1.源碼修改位置
1.1 第493行_createNode方法增加 數據==0時依舊顯示的判斷
function _createNode( doc, nodeName, opts ) {
var tempNode = doc.createElement( nodeName );
if ( opts ) {
if ( opts.attr ) {
$(tempNode).attr( opts.attr );
}
if( opts.children ) {
$.each( opts.children, function ( key, value ) {
tempNode.appendChild( value );
});
}
//增加text==0的情況,否則如果數據==0時會不顯示
if( opts.text || opts.text == 0) {
tempNode.appendChild( doc.createTextNode( opts.text ) );
}
}
return tempNode;
}
1.2 第613行 620行增加數據格式
//這裏數字+1 由6改爲7
'<numFmts count="7">'+
'<numFmt numFmtId="164" formatCode="#,##0.00_-\ [$$-45C]"/>'+
'<numFmt numFmtId="165" formatCode=""£"#,##0.00"/>'+
'<numFmt numFmtId="166" formatCode="[$€-2]\ #,##0.00"/>'+
'<numFmt numFmtId="167" formatCode="0.0%"/>'+
'<numFmt numFmtId="168" formatCode="#,##0;(#,##0)"/>'+
'<numFmt numFmtId="169" formatCode="#,##0.00;(#,##0.00)"/>'+
//增加兩位小數百分比格式format
'<numFmt numFmtId="170" formatCode="0.00%"/>'+
'</numFmts>'
1.3 第705行 785行增加格式種類
//這裏數字+1 由67改爲68
'<cellXfs count="68">'+
......
//這裏numFmtId對應上面添加的numFmtId,其他與numFmtId=164保留一位小數百分比格式一致
+ '<xf numFmtId="170" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>'+
1.5 第802行增加百分比兩位小數匹配正則
//match匹配正則,style匹配67(官方提供從0-66共67種格式,新增的數字從67開始,不過style好像沒起作用)
{ match: /^\-?\d+\.\d{2}%$/, style: 67, fmt: function (d) { return d/100; } },
2.代碼引用
buttons: [{
extend: 'excelHtml5',
text: '導出(按鈕標題)',
title: 'excel標題',
className: 'btn btn-primary',
customize: function ( xlsx ) {
var sheet = xlsx.xl.worksheets['sheet1.xml'];
//這裏表示第E列所有數據使用第67種數據格式(新增的那種格式)
$('row c[r^="E"]', sheet).attr( 's', '67' );
},
}],
3.擴展
如果想導出excel時使用更多的數據格式,可參考https://msdn.microsoft.com/en-us/library/aa140066(office.10).aspx 定製特殊格式