Datatable customize the export to excel

Admin 2020.05.20 10:04 조회 수 : 17

Datatable에서 테이블 내용을 엑셀로 저장할때, 타이틀에 다른 내용을 추가하는 방법이다.

병합된 라인을 분리해서 병합 영역을 재지정해준후, 가운데 정렬하고, 새로운 자료를 입력한다.

 

<script src="{{asset('vendors/js/datatables/datatables.min.js')}}"></script>
<script type="text/javascript">
$.extend( true, $.fn.dataTable.defaults, {
  buttons: [
    {
      extend: 'excel',//'excelHtml5'
      title: 'Program Summary',
      stripHtml: false,
      className: 'btn btn-light-secondary mb-1 mr-1',
      text: '<i class="bx bx-file font-medium-1"></i>Export to Excel',
      exportOptions: {
        format: {
          header: function ( data, column, row ) {
            return data.replace( /<br\s*\/?>/ig, '\r\n' );
          }
        }
      },
      customize: function( xlsx ) {
        var sheet = xlsx.xl.worksheets['sheet1.xml'];
        $('row c', sheet).attr( 's', '55' ); // Text Wrap
        var mergeCells = $('mergeCells', sheet);
        mergeCells[0].getElementsByTagName('mergeCell')[0].setAttribute("ref","A1:I1"); // 셀병합 영역 재지정 A1-I1
        $('row:eq(0) c', sheet).attr( 's', '51' ); // Align Center
        $('row:eq(0)', sheet).append('<c t="inlineStr" r="J1" s="51"><is><t>{{date('Y-m-d')}}</t></is></c>'); // 타이틀 J1 컬럼에 날짜 추가
      },
      customizeData: function(data){
        //data.header[9] = 'CUSTOM TITLE';
        //data.body[0][9] = 'CUSTOM TEXT';
      }
    },
    {
      extend: 'print',
      className: 'btn btn-light-secondary mb-1 mr-1',
      text: '         <i class="bx bx-printer font-medium-1"></i>Print         ',
      exportOptions: {
        stripHtml: false
      }
    }
  ],
  order: [ ],
  autoWidth: true,
  searching: false,
  ordering: true,
  rowReorder: false, // do not change to true
  displayLength: 100,
  pageLength: 100,
  stateSave: false,
  lengthChange: false,
  //ajax: '{{ route("index") }}',
  info: false,
  paging: false,
  serverSide: false,
  processing: true,
  responsive: true
} );
</script>