phpspreadsheet 导出 excel 表

composer require phpoffice/phpspreadsheet

调用:

 //设置表头:
 $excel_title = ['前缀', '前6位', '省份', '城市', '运营商', 'post_code', 'city_code', 'area_code'];
 //数据中对应的字段,用于读取相应数据:
 $excel_filed = ['prefix', 'phone', 'province', 'city', 'isp', 'post_code', 'city_code', 'area_code'];
 $this->OfficeExport('订单表', $phoneinfo_sel_obj, $excel_title, $excel_filed);

导出方法:

/**
     * [OfficeExport  phpspreadsheet 导出excel表]
     * @Author           猴子年华、
     * @CreateTime       2019-03-15
     * @LatestUpdateTime 2019-03-15
     * @remark           [remark]
     * @copyright        [copyright]
     * @license          [license]
     * @version          [version]
     * @param            string      $excel_name  [ excel表的表名 ]
     * @param            array       $excel_data  [ 要导出excel表的数据,接受一个二维数组 ]
     * @param            array       $excel_title [ excel表的表头,接受一个一维数组 ]
     * @param            array       $excel_filed [ $data中字段名,接受一个一维数组 ]
     */
    public function OfficeExport($excel_name='测试表', $excel_data=[], $excel_title=[], $excel_filed=[])
    {
        try {
            $count       = count($excel_title);  //计算表头数量 
            $spreadsheet = new Spreadsheet();
            $sheet       = $spreadsheet->getActiveSheet();
            ob_clean();    //解决文件损坏
            $cellName = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'];

            /*---设置Excel title-------开始-----------*/
            $spreadsheet->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.'  导出时间:'.date('Y-m-d H:i:s'));
            foreach ($excel_title as $excel_title_key_one => $excel_title_val_one) {
                $sheet->setCellValue($cellName[$excel_title_key_one] . '1', $excel_title_val_one);
                $sheet->getColumnDimension($cellName[$excel_title_key_one])->setWidth(20); //固定列宽,表格宽度
            }
            /*---设置Excel title-------结束-----------*/

            /*---开始从数据库提取信息插入Excel表中-------开始-----------*/
            foreach ($data as $key => $item) {
                foreach ($excel_title as $excel_title_key_two => $excel_title_val_two) {  // 这里循环 excel_title 导出前,就不用再组装数据了
                    $sheet->setCellValue($cellName[$key] . ($key + 2), $item[$excel_filed[$excel_title_key]]); // 行写入,从第二行开始写
                    $sheet->getColumnDimension($cellName[$key])->setWidth(20); //固定列宽,表格宽度
                }
            }
            /*---开始从数据库提取信息插入Excel表中-------结束-----------*/

            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="' . $excel_name . '.xlsx"');
            header('Cache-Control: max-age=0'); // 禁止缓存
            header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
            $writer = new Xlsx($spreadsheet);
            $writer->save('php://output');
            //删除清空:释放内存
            $spreadsheet->disconnectWorksheets();
            unset($spreadsheet);
            exit;
        } catch (Exception $e) {
            return false;
        }
    }

 

你可能感兴趣的:(PHP)