Advertisement
Syehaji93

Export excel using phpspreadsheet and ajax

Mar 23rd, 2023
937
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.74 KB | Software | 0 0
  1.     //Controller
  2.     public function export()
  3.     {
  4.         if($this->request->isAJAX())
  5.         {
  6.             $fromDate = $this->request->getVar('fromDate');
  7.             $toDate = $this->request->getVar('toDate');
  8.             $submit = $this->request->getVar('submit');
  9.  
  10.             $response = array();
  11.      
  12.             // Read new token and assign in $response['token']
  13.             $response['token'] = csrf_hash();
  14.  
  15.             /* created excel */
  16.             $spreadsheet = new Spreadsheet();
  17.             $sheet = $spreadsheet->getActiveSheet();
  18.  
  19.             // Buat sebuah variabel untuk menampung pengaturan style dari header tabel
  20.             $style_col = [
  21.                 'font' => ['bold' => true], // Set font nya jadi bold
  22.                 'alignment' => [
  23.                     'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER, // Set text jadi ditengah secara horizontal (center)
  24.                     'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER // Set text jadi di tengah secara vertical (middle)
  25.                 ],
  26.                 'borders' => [
  27.                     'top' => ['borderStyle'  => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN], // Set border top dengan garis tipis
  28.                     'right' => ['borderStyle'  => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN],  // Set border right dengan garis tipis
  29.                     'bottom' => ['borderStyle'  => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN], // Set border bottom dengan garis tipis
  30.                     'left' => ['borderStyle'  => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN] // Set border left dengan garis tipis
  31.                     ]
  32.             ];
  33.  
  34.             // Buat sebuah variabel untuk menampung pengaturan style dari isi tabel
  35.             $style_row = [
  36.                 'alignment' => [
  37.                     'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER // Set text jadi di tengah secara vertical (middle)
  38.                 ],
  39.                 'borders' => [
  40.                     'top' => ['borderStyle'  => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN], // Set border top dengan garis tipis
  41.                     'right' => ['borderStyle'  => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN],  // Set border right dengan garis tipis
  42.                     'bottom' => ['borderStyle'  => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN], // Set border bottom dengan garis tipis
  43.                     'left' => ['borderStyle'  => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN] // Set border left dengan garis tipis
  44.                 ]
  45.             ];
  46.  
  47.             $sheet->setCellValue('A1', "CHECK SHEET VERIFIKASI HASIL UPLOAD"); // Set kolom A1 dengan tulisan "DATA SISWA"
  48.             $sheet->mergeCells('A1:K1'); // Set Merge Cell pada kolom A1 sampai E1
  49.             $sheet->getStyle('A1')->getFont()->setBold(true); // Set bold kolom A1
  50.  
  51.             // Buat header tabel nya pada baris ke 3
  52.             $sheet->setCellValue('A3', "NO");
  53.             $sheet->setCellValue('B3', "TIPE");
  54.             $sheet->setCellValue('C3', "LOT");
  55.             $sheet->setCellValue('D3', "DELIVERY");
  56.             $sheet->setCellValue('E3', "SIDE MAIN");
  57.             $sheet->setCellValue('F3', "PIC");
  58.             $sheet->setCellValue('G3', "SIDE B");
  59.             $sheet->setCellValue('H3', "PIC");
  60.             $sheet->setCellValue('I3', "SIDE A");
  61.             $sheet->setCellValue('J3', "PIC");
  62.             $sheet->setCellValue('K3', "RESULT");
  63.  
  64.             // Apply style header yang telah kita buat tadi ke masing-masing kolom header
  65.             $sheet->getStyle('A3')->applyFromArray($style_col);
  66.             $sheet->getStyle('B3')->applyFromArray($style_col);
  67.             $sheet->getStyle('C3')->applyFromArray($style_col);
  68.             $sheet->getStyle('D3')->applyFromArray($style_col);
  69.             $sheet->getStyle('E3')->applyFromArray($style_col);
  70.             $sheet->getStyle('F3')->applyFromArray($style_col);
  71.             $sheet->getStyle('G3')->applyFromArray($style_col);
  72.             $sheet->getStyle('H3')->applyFromArray($style_col);
  73.             $sheet->getStyle('I3')->applyFromArray($style_col);
  74.             $sheet->getStyle('J3')->applyFromArray($style_col);
  75.             $sheet->getStyle('K3')->applyFromArray($style_col);
  76.  
  77.             //panggil data checksheet   ch_delivery >= '".$start."' AND ch_delivery <= '".$end."'
  78.             $db = \Config\Database::connect();
  79.             $boms = $db->table('tb_cek_harian')->getWhere(['ch_delivery >=' => $fromDate, 'ch_delivery <=' => $toDate])->getResult();
  80.  
  81.             $no = 1; // Untuk penomoran tabel, di awal set dengan 1
  82.             $numrow = 4; // Set baris pertama untuk isi tabel adalah baris ke 4
  83.             foreach($boms as $dt => $data){ // Lakukan looping
  84.  
  85.                 $sheet->setCellValue('A'.$numrow, $no);
  86.                 $sheet->setCellValue('B'.$numrow, $data->ch_name);
  87.                 $sheet->setCellValue('C'.$numrow, $data->ch_lot);
  88.                 $sheet->setCellValue('D'.$numrow, $data->ch_delivery);
  89.                 $sheet->setCellValue('E'.$numrow, $data->ch_side_main);
  90.                 $sheet->setCellValue('F'.$numrow, $data->ch_pic_main);
  91.                 $sheet->setCellValue('G'.$numrow, $data->ch_side_b);
  92.                 $sheet->setCellValue('H'.$numrow, $data->ch_pic_b);
  93.                 $sheet->setCellValue('I'.$numrow, $data->ch_side_a);
  94.                 $sheet->setCellValue('J'.$numrow, $data->ch_pic_a);
  95.                 $sheet->setCellValue('K'.$numrow, $data->ch_result);
  96.  
  97.                 // Apply style row yang telah kita buat tadi ke masing-masing baris (isi tabel)
  98.                 $sheet->getStyle('A'.$numrow)->applyFromArray($style_row);
  99.                 $sheet->getStyle('B'.$numrow)->applyFromArray($style_row);
  100.                 $sheet->getStyle('C'.$numrow)->applyFromArray($style_row);
  101.                 $sheet->getStyle('D'.$numrow)->applyFromArray($style_row);
  102.                 $sheet->getStyle('E'.$numrow)->applyFromArray($style_row);
  103.                 $sheet->getStyle('F'.$numrow)->applyFromArray($style_row);
  104.                 $sheet->getStyle('G'.$numrow)->applyFromArray($style_row);
  105.                 $sheet->getStyle('H'.$numrow)->applyFromArray($style_row);
  106.                 $sheet->getStyle('I'.$numrow)->applyFromArray($style_row);
  107.                 $sheet->getStyle('J'.$numrow)->applyFromArray($style_row);
  108.                 $sheet->getStyle('K'.$numrow)->applyFromArray($style_row);
  109.  
  110.                 $no++; // Tambah 1 setiap kali looping
  111.                 $numrow++; // Tambah 1 setiap kali looping
  112.             }
  113.  
  114.             // Set width kolom
  115.             $sheet->getColumnDimension('A')->setWidth(5); // Set width kolom A
  116.             $sheet->getColumnDimension('B')->setWidth(15); // Set width kolom B
  117.             $sheet->getColumnDimension('C')->setWidth(25); // Set width kolom C
  118.             $sheet->getColumnDimension('D')->setWidth(20); // Set width kolom D
  119.             $sheet->getColumnDimension('E')->setWidth(30); // Set width kolom E
  120.             $sheet->getColumnDimension('F')->setWidth(30); // Set width kolom E
  121.             $sheet->getColumnDimension('G')->setWidth(30); // Set width kolom E
  122.             $sheet->getColumnDimension('H')->setWidth(30); // Set width kolom E
  123.             $sheet->getColumnDimension('I')->setWidth(30); // Set width kolom E
  124.             $sheet->getColumnDimension('J')->setWidth(30); // Set width kolom E
  125.             $sheet->getColumnDimension('K')->setWidth(30); // Set width kolom E
  126.  
  127.             // Set height semua kolom menjadi auto (mengikuti height isi dari kolommnya, jadi otomatis)
  128.             $sheet->getDefaultRowDimension()->setRowHeight(-1);
  129.  
  130.             // Set orientasi kertas jadi LANDSCAPE
  131.             $sheet->getPageSetup()->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE);
  132.  
  133.             // Set judul file excel nya
  134.             $sheet->setTitle("Checksheet");
  135.             /* ./ created excel */
  136.  
  137.             $writer = new Xlsx($spreadsheet);
  138.             $filename = date('Y-m-d-His'). '-Data-Verifikasi';
  139.  
  140.             $writer->save('php://output');
  141.  
  142.             header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  143.             header("Pragma: public");
  144.             header("Expires: 0");
  145.             header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  146.             header("Content-Type: application/force-download");
  147.             header("Content-Type: application/octet-stream");
  148.             header("Content-Type: application/download");;
  149.             header('Content-Disposition: attachment;filename='  . $filename . '.xlsx');
  150.  
  151.             readfile($filename); // send file
  152.             unlink($filename); // delete file
  153.             exit;
  154.            
  155.             $data = [
  156.                 'filename' => $filename.'.xlsx',
  157.                 'token' => csrf_hash(),
  158.             ];
  159.  
  160.             echo json_encode($data);
  161.            
  162.         }else{
  163.             exit('Maaf request tidak dapat diproses!');
  164.         }
  165.     }
  166.  
  167.  
  168. //ajax
  169. // select data for check sheet
  170.     $('#btn_e').on('click', function(e){
  171.         e.preventDefault();
  172.         var fromDate = $("#fromDate").val();
  173.         var toDate = $("#toDate").val();
  174.  
  175.         if(fromDate == ''){
  176.           error_firstname = 'please enter from delivery date';
  177.           alert(error_firstname);
  178.         }
  179.         else if(toDate == ''){
  180.           error_lastname = 'please enter to delivery date';
  181.           alert(error_lastname);
  182.         }else{
  183.             console.log('test');
  184.             // CSRF Hash
  185.             var csrfName = $('.txt_csrfname').attr('name'); // CSRF Token name
  186.             var csrfHash = $('.txt_csrfname').val(); // CSRF hash
  187.  
  188.             var dataJson = {
  189.                 [csrfName]: csrfHash,
  190.                 fromDate: $("#fromDate").val(),
  191.                 toDate: $("#toDate").val()
  192.             };
  193.            
  194.             $.ajax({
  195.                 url: "<?php echo base_url('/checksheet/export'); ?>",
  196.                 type: "post",
  197.                 data: dataJson,
  198.                 dataType: "json",
  199.                 success: function(response)
  200.                 {
  201.                     // Update CSRF Token
  202.                     $('.txt_csrfname').val(data.token);
  203.                     // console.log(data.filename);
  204.                     window.location = '<?= site_url('/checksheet/export') ?>';
  205.                    
  206.                     // formDate = "",
  207.                     // toDate = ""
  208.                 },
  209.                 error: function (jqXhr, textStatus, errorMessage) { // error callback
  210.                     alert(xhr.status + "\n" + xhr.responseText + "\n" + thrownError);
  211.                 }
  212.             });
  213.             return false;
  214.         }
  215.     });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement