#### 1. 下载扩展包 --- ```php composer require phpoffice/phpexcel ``` #### 2. 导出数据封装 --- **在TP中使用时可以将以下类文件放入 extend 目录** ```php <?php /** * 导出数据 * PHP7.2版本以下推荐使用 phpoffice/phpexcel * PHP7.2版本以上推荐使用 phpoffice/phpspreadsheet * composer require phpoffice/phpexcel */ class Excel { /** * 导出数据使用示例 */ public static function exportDemo() { ########## 使用示例 ########## // 表头 $header = [ 'id', '姓名', '手机号' ]; // 表格数据 $data = [ [ 'id' => '1', 'name' => '张三', 'mobile' => 15037843784, ], [ 'id' => 2, 'name' => '李四', 'mobile' => 15510191019, ], ]; // 设置为字符串 $stringColumn = ['A', 'B']; // 设置列宽 $colWidth = [ 'C' => 20, ]; self::export($header, $data, $colWidth, $stringColumn, [ 'filename' => '用户信息', 'title' => '示例表格', ]); } /** * 导出Excel表格 * 应用场景:导出订单,导出用户信息 * @param array $header 表头 * @param array $data 表格数据 * @param array $colWidth 设置列宽 * @param array $extra 附加数据 */ public static function export($header, $data, $colWidth, $extra = []) { $objPHPExcel = new PHPExcel; $activeSheet = $objPHPExcel->setActiveSheetIndex(0); // 默认单元格内容左对齐 $activeSheet ->getDefaultStyle() ->getAlignment() ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); // 设置表格文件名 if ( ! empty($extra['filename']) ) { // 文件名 $filename = $extra['filename']; } else { // 文件名 $filename = '导出示例' . date('Y年m月d日H时i分s秒'); } // 设置工作薄标题 if ( ! empty($extra['title']) ) { // 参数要求必须为字符串 $activeSheet->setTitle((string)$extra['title']); } // 获取 'A' 的 ASCII值 $key = ord('A'); foreach ($header as $v) { // 将 ASCII 值转为字符 // 示例: A,B,C,D $colum = chr($key); if ( ! empty($colWidth[$colum]) ) { $activeSheet->getColumnDimension($colum)->setWidth($colWidth[$colum]); } // 单元格写入数据 $activeSheet->setCellValue($colum . '1', $v); $key += 1; } // 从第二行写入数据 $column = 2; foreach ($data as $rows) { // 行写入 $span = ord("A"); foreach ($rows as $keyName => $value) { // 列写入 // 解决php导出excel 长数字变成科学计数法 $activeSheet ->getStyle(chr($span) . $column) ->getNumberFormat() ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER); if ( in_array(chr($span), $stringColumn) ) { // 设置为字符串文本 处理数字过长变为科学计数法和身份证号后几位变为0的情况 $objActSheet->setCellValue(chr($span) . $column, $value . ' '); } else { $objActSheet->setCellValue(chr($span) . $column, $value); } $span++; } $column++; } // Excel2003 后缀 .xls // MIME 协议,文件的类型,不设置,会默认html // header('Content-Type: application/vnd.ms-excel'); // // MIME 协议的扩展 // header('Content-Disposition:attachment;filename=' . $filename . '.xls'); // // 缓存控制 // header('Cache-Control:max-age=0'); // $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); // Excel2007 后缀 .xlsx // MIME 协议,文件的类型,不设置,会默认html header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // MIME 协议的扩展 header('Content-Disposition:attachment;filename=' . $filename . '.xlsx'); // 缓存控制 header('Cache-Control:max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); //文件通过浏览器下载 $objWriter->save('php://output'); } } ```