phpoffice/phpexcel 导出Excel表格数据

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,
            ],
        ];
        // 设置列宽
        $colWidth = [
            'C' => 20,
        ];
        self::export($header, $data, $colWidth, [
			'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);
                $activeSheet->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');
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值