PHP下載Excel文件是Web應(yīng)用程序中非常普遍的需求,因?yàn)镋xcel表格是進(jìn)行數(shù)據(jù)處理的首選工具之一。
在PHP中,使用PHPExcel這個(gè)庫(kù)可以很方便地實(shí)現(xiàn)Excel的創(chuàng)建、讀取、修改和下載。以下是一個(gè)例子:
require_once 'PHPExcel.php'; $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0) ->setCellValue('A1', 'Hello') ->setCellValue('B1', 'World'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="example.xlsx"'); header('Cache-Control: max-age=0'); $objWriter->save('php://output');
在上面的例子中,首先會(huì)創(chuàng)建一個(gè)PHPExcel對(duì)象。然后通過setActiveSheetIndex方法設(shè)置當(dāng)前活動(dòng)的工作表,并使用setCellValue方法設(shè)置工作表上的單元格的值。接下來,使用PHPExcel_IOFactory庫(kù)中的createWriter方法來創(chuàng)建一個(gè)Excel2007格式的寫入器,最后設(shè)置一些HTTP頭信息來向?yàn)g覽器返回Excel文件的數(shù)據(jù)流。
如果要從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)并導(dǎo)出到Excel文件中,可以使用以下代碼:
require_once 'PHPExcel.php'; // 獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù) $conn = mysqli_connect('localhost', 'root', '', 'test') or die('Could not connect: '.mysqli_error($conn)); $sql = 'SELECT name, age, gender FROM users'; $result = mysqli_query($conn, $sql); // 創(chuàng)建PHPExcel對(duì)象 $objPHPExcel = new PHPExcel(); // 設(shè)置當(dāng)前活動(dòng)的工作表 $objPHPExcel->setActiveSheetIndex(0); // 設(shè)置工作表的列名 $objPHPExcel->getActiveSheet()->setCellValue('A1', 'Name') ->setCellValue('B1', 'Age') ->setCellValue('C1', 'Gender'); // 設(shè)置單元格格式 $headerStyle = array( 'font' =>array('bold' =>true), 'alignment' =>array('horizontal' =>PHPExcel_Style_Alignment::HORIZONTAL_CENTER) ); $objPHPExcel->getActiveSheet()->getStyle('A1:C1')->applyFromArray($headerStyle); // 填充數(shù)據(jù) $row = 2; while ($data = mysqli_fetch_assoc($result)) { $objPHPExcel->getActiveSheet()->setCellValue('A'.$row, $data['name']) ->setCellValue('B'.$row, $data['age']) ->setCellValue('C'.$row, $data['gender']); $row++; } // 設(shè)置列寬自適應(yīng) foreach(range('A', 'C') as $columnID) { $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true); } // 輸出Excel文件 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="users.xlsx"'); header('Cache-Control: max-age=0'); $objWriter->save('php://output'); exit;
在上面的例子中,首先連接到數(shù)據(jù)庫(kù)并執(zhí)行查詢。然后創(chuàng)建了一個(gè)PHPExcel對(duì)象,并設(shè)置當(dāng)前活動(dòng)的工作表和列名。接下來,循環(huán)遍歷數(shù)據(jù)庫(kù)中的數(shù)據(jù)并將其填充到工作表中。最后通過設(shè)置列寬自適應(yīng)和設(shè)置HTTP頭信息來下載Excel文件。
總結(jié)來說,使用PHPExcel庫(kù)可以方便地導(dǎo)出和下載Excel文件,而且可以支持大量數(shù)據(jù)和復(fù)雜的格式設(shè)置。