Export Excel multiple files & download

Lượt xem: 1271

Ở bài trước dandev đã cùng các bạn tìm hiểu export excels chứa nhiều sheets . Ở bài này chúng ta sẽ tìm hiểu cách export nhiều file excels cùng 1 lúc và download file.

Quy trình xử lý của mình gồm: lưu file trên server, zip file và download

Trước tiên các bạn bổ sung code này cho dandev nhé. Trong video dandev sẽ giải thích thêm về từng đoạn code

 


if(isset($_GET['excel'])) {
$result = mysqli_query($conn,"SELECT * FROM Customers". $where);
  // Create new PHPExcel object
$objPHPExcel = new PHPExcel();

$objPHPExcelClone =  new PHPExcel();
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Tên khách hàng')
            ->setCellValue('B1','Điện thoại')
            ->setCellValue('C1', 'Địa chỉ')
            ->setCellValue('D1', 'Email');

// Add some data
$objPHPExcelClone->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Tên khách hàng2')
            ->setCellValue('B1','Điện thoại2')
            ->setCellValue('C1', 'Địa chỉ2')
            ->setCellValue('D1', 'Email2');
 $key = 0;
 $key2 = 0;
 while($customer = mysqli_fetch_assoc($result)) {

// Add some data
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A'.($key+2), $customer['CustomerName'])
            ->setCellValue('B'.($key+2), $customer['Phone'])
            ->setCellValue('C'.($key+2), $customer['Address'])
            ->setCellValue('D'.($key+2), $customer['email']);
            $key ++;
  if(strcmp($customer['role'], 'admin') == 0 ) {
    $objPHPExcelClone->setActiveSheetIndex(0)
      ->setCellValue('A'.($key2+2), $customer['CustomerName'])
      ->setCellValue('B'.($key2+2), $customer['Phone'])
      ->setCellValue('C'.($key2+2), $customer['Address'])
      ->setCellValue('D'.($key2+2), $customer['email']);
      $key2 ++;
  }
 }
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Customer');
$objPHPExcelClone->getActiveSheet()->setTitle('Admin');
//$objPHPExcel->addSheet($objPHPExcelClone);
saveFile($objPHPExcelClone, 'admin.xlsx');
saveFile($objPHPExcel, 'customer.xlsx');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
//$objPHPExcel->setActiveSheetIndex(0);
$dir = dirname(__FILE__);

$files[] = 'exports/admin.xlsx';
$files[] = 'exports/customer.xlsx';

$zip = new ZipArchive();            // Load zip library 
$zip_name = time().".zip";          // Zip name
if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){       // Opening zip file to load files
    $error .=  "* Sorry ZIP creation failed at this time
";
}

foreach($files as $file){               
    $zip->addFile($file);          // Adding files into zip
}
$zip->close();
if(file_exists($zip_name)){
    // push to download the zip
    header('Content-type: application/zip');
    header('Content-Disposition: attachment; filename="'.$zip_name.'"');
    readfile($zip_name);
    // remove zip file is exists in temp path
    unlink($zip_name);
}
}
function saveFile($objPHPExcel, $file_name) {
  $dir = dirname(__FILE__);
  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  $objWriter->save($dir.'/exports/'.$file_name);
}

Video