雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

phpoffice/phpexcel 导出Excel表格数据

2024-09-08 48

1. 下载扩展包


composer require phpoffice/phpexcel

2. 导出数据封装


在TP中使用时可以将以下类文件放入 extend 目录

<?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');    }}
更新于:2个月前
赞一波!

文章评论

评论问答