概述
使用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 定制特殊格式