ThinkPHP5+PHPExcel导入导出

原文链接:https://www.whongbin.cn/index/article/detail/id/58.html

image

前言

不得不说,phpExcel是个很好的工具类,之前在typo3项目中一直在用,这两天找下资料,发现在tp5中使用起来更加的简单,奉上安装代码和使用代码

安装

在linux中,进入项目目录,不是根目录(public

# 进入项目目录
cd /var/www/html/fuhuaqi/

# 安装PHPExcel
composer require phpoffice/phpexcel
cd ./vendor/
ls -l 

执行完上述代码后,若在 vendor 存在 phpoffice 目录,则安装成功,可以使用了

代码

导入

下面代码可以直接放在 application 目录下的 common.php 中,以便全局调用

if (!function_exists('excel_export')) {
    /**
     * excel表格导出
     * @param string $fileName 文件名称
     * @param array $headArr 表头名称
     * @param array $data 要导出的数据
     */
    function excel_export($fileName = '', $headArr = [], $data = []) {
        $fileName .= "_" . date("Ymd", \think\Request::instance()->time()) . ".xls";
        $objPHPExcel = new \PHPExcel();
        $objPHPExcel->getProperties();
        $key = ord("A"); // 设置表头
        foreach ($headArr as $v) {
            $colum = chr($key);
            //设置表头值
            $objPHPExcel->getActiveSheet()->setCellValue($colum.'1',$v);
            //设置表头字体样式
            $objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFont()->setName('微软雅黑');
            //设置表头字体大小
            $objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFont()->setSize(13);
            //设置表头字体是否加粗
            $objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFont()->setBold(true);
            //设置表头文字水平居中
            $objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            //设置文字上下居中
            $objPHPExcel->getActiveSheet()->getStyle($colum)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
            //设置单元格背景色
            $objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFill()->getStartColor()->setARGB('FFFFFFFF');
            $objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            $objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFill()->getStartColor()->setARGB('FF6DBA43');
            //设置字体颜色
            $objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFont()->getColor()->setARGB('FFFFFFFF');

            //设置列宽度
            $objPHPExcel->getActiveSheet()->getColumnDimension($colum)->setWidth(strlen($v)*3);
            $key += 1;
        }

        $column = 2;
        $objActSheet = $objPHPExcel->getActiveSheet();
        foreach ($data as $key => $rows) { // 行写入
            $span = ord("A");
            foreach ($rows as $keyName => $value) { // 列写入
                if (is_numeric($value)) $value = ' '.$value;
                $objActSheet->setCellValue(chr($span) . $column, $value);
                $span++;
            }
            $column++;
        }

        $fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表
        $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
        header('Content-Type: application/vnd.ms-excel');
        header("Content-Disposition: attachment;filename='$fileName'");
        header('Cache-Control: max-age=0');
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output'); // 文件通过浏览器下载
        exit();
    }
}

控制器中使用

/**
 * tp5 使用excel导出
 * @param
 * @return mixed
 */
public function excel() {
    $name = '预约企业列表';
    $header=['企业名称','负责人', '电话','预约服务','需求','预约时间'];
    $datas=db('reservation')->alias('a')
        ->join('service s','s.id=a.service','LEFT')
        ->field('a.companyname,a.legalperson,a.legalphone,a.indorsation,s.title,a.create_time')
        ->order('a.create_time asc')
        ->select();
    excel_export($name,$header,$datas);
}

你可能感兴趣的:(ThinkPHP5+PHPExcel导入导出)