datatable excelHtml5 自定義列格式(百分比保留兩位小數)

概述

使用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="&quot;£&quot;#,##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 定製特殊格式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章