#### 1. 下載擴(kuò)展包 --- ```php composer require phpoffice/phpexcel ``` #### 2. 導(dǎo)出數(shù)據(jù)封裝 --- **在TP中使用時可以將以下類文件放入 extend 目錄** ```php <?php /** * 導(dǎo)出數(shù)據(jù) * PHP7.2版本以下推薦使用 phpoffice/phpexcel * PHP7.2版本以上推薦使用 phpoffice/phpspreadsheet * composer require phpoffice/phpexcel */ class Excel { /** * 導(dǎo)出數(shù)據(jù)使用示例 */ public static function exportDemo() { ########## 使用示例 ########## // 表頭 $header = [ 'id', '姓名', '手機(jī)號' ]; // 表格數(shù)據(jù) $data = [ [ 'id' => '1', 'name' => '張三', 'mobile' => 15037843784, ], [ 'id' => 2, 'name' => '李四', 'mobile' => 15510191019, ], ]; // 設(shè)置為字符串 $stringColumn = ['A', 'B']; // 設(shè)置列寬 $colWidth = [ 'C' => 20, ]; self::export($header, $data, $colWidth, $stringColumn, [ 'filename' => '用戶信息', 'title' => '示例表格', ]); } /** * 導(dǎo)出Excel表格 * 應(yīng)用場景:導(dǎo)出訂單,導(dǎo)出用戶信息 * @param array $header 表頭 * @param array $data 表格數(shù)據(jù) * @param array $colWidth 設(shè)置列寬 * @param array $extra 附加數(shù)據(jù) */ public static function export($header, $data, $colWidth, $extra = []) { $objPHPExcel = new PHPExcel; $activeSheet = $objPHPExcel->setActiveSheetIndex(0); // 默認(rèn)單元格內(nèi)容左對齊 $activeSheet ->getDefaultStyle() ->getAlignment() ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); // 設(shè)置表格文件名 if ( ! empty($extra['filename']) ) { // 文件名 $filename = $extra['filename']; } else { // 文件名 $filename = '導(dǎo)出示例' . date('Y年m月d日H時i分s秒'); } // 設(shè)置工作薄標(biāo)題 if ( ! empty($extra['title']) ) { // 參數(shù)要求必須為字符串 $activeSheet->setTitle((string)$extra['title']); } // 獲取 'A' 的 ASCII值 $key = ord('A'); foreach ($header as $v) { // 將 ASCII 值轉(zhuǎn)為字符 // 示例: A,B,C,D $colum = chr($key); if ( ! empty($colWidth[$colum]) ) { $activeSheet->getColumnDimension($colum)->setWidth($colWidth[$colum]); } // 單元格寫入數(shù)據(jù) $activeSheet->setCellValue($colum . '1', $v); $key += 1; } // 從第二行寫入數(shù)據(jù) $column = 2; foreach ($data as $rows) { // 行寫入 $span = ord("A"); foreach ($rows as $keyName => $value) { // 列寫入 // 解決php導(dǎo)出excel 長數(shù)字變成科學(xué)計(jì)數(shù)法 $activeSheet ->getStyle(chr($span) . $column) ->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER); if ( in_array(chr($span), $stringColumn) ) { // 設(shè)置為字符串文本 處理數(shù)字過長變?yōu)榭茖W(xué)計(jì)數(shù)法和身份證號后幾位變?yōu)?的情況 $objActSheet->setCellValue(chr($span) . $column, $value . ' '); } else { $objActSheet->setCellValue(chr($span) . $column, $value); } $span++; } $column++; } // Excel2003 后綴 .xls // MIME 協(xié)議,文件的類型,不設(shè)置,會默認(rèn)html // header('Content-Type: application/vnd.ms-excel'); // // MIME 協(xié)議的擴(kuò)展 // header('Content-Disposition:attachment;filename=' . $filename . '.xls'); // // 緩存控制 // header('Cache-Control:max-age=0'); // $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); // Excel2007 后綴 .xlsx // MIME 協(xié)議,文件的類型,不設(shè)置,會默認(rèn)html header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // MIME 協(xié)議的擴(kuò)展 header('Content-Disposition:attachment;filename=' . $filename . '.xlsx'); // 緩存控制 header('Cache-Control:max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); //文件通過瀏覽器下載 $objWriter->save('php://output'); } } ```