首页 > Web开发 > 详细

【PHP】phpoffice实现excel导入导出

时间:2019-11-27 15:18:38      阅读:62      评论:0      收藏:0      [点我收藏+]

本例以thinkphp5.1为例

包地址:

https://packagist.org/packages/phpoffice/phpexcel

使用:

composer require phpoffice/phpexcel

控制器引入

//引入phpoffice
use PHPExcel;
use PHPExcel_IOFactory;

 

导出代码:

//execl模板下载
    public function template_download()
    {
        $objExcel = new PHPExcel();
        $objWriter = \PHPExcel_IOFactory::createWriter($objExcel, Excel5);
        $objActSheet = $objExcel->getActiveSheet(0);
        $objActSheet->setTitle(会员批量导入模板); //设置excel的标题
        $objActSheet->setCellValue(A1, 用户id);
        $objActSheet->setCellValue(B1, 昵称);
        $objActSheet->setCellValue(C1, 手机号);

        $baseRow = 2; //数据从N-1行开始往下输出 这里是避免头信息被覆盖
        //默认数据
        $explame_data = array(
            array(
                user_id => 1,
                nickname => 小明,
                phone => 15012345678,
            ),
        );

        foreach ($explame_data as $key => $value) {
            $i = $baseRow + $key;
            $objExcel->getActiveSheet()->setCellValue(A . $i, $value[user_id]);
            $objExcel->getActiveSheet()->setCellValue(B . $i, $value[nickname]);
            $objExcel->getActiveSheet()->setCellValue(C . $i, $value[phone]);
        }


        $objExcel->setActiveSheetIndex(0);
        //4、输出
        $objExcel->setActiveSheetIndex();
        header(Content-Type: applicationnd.ms-excel);
        $time = date(Y-m-d);
        header("Content-Disposition: attachment;filename=会员批量导入模板" . $time . ".xls");
        header(Cache-Control: max-age=0);
        $objWriter->save(php://output);
    }

 

导入代码:

    public function import_batch_send()
    {
        header("content-type:text/html;charset=utf-8");

        //上传excel文件
        $file = request()->file(file);
        //将文件保存到public/uploads目录下面
        $info = $file->validate([size => 1048576, ext => xls,xlsx])->move(./uploads);
        if ($info) {
            //获取上传到后台的文件名
            $fileName = $info->getSaveName();
            //获取文件路径
            $filePath = Env::get(root_path) . public . DIRECTORY_SEPARATOR . uploads . DIRECTORY_SEPARATOR . $fileName;
            //获取文件后缀
            $suffix = $info->getExtension();
            //判断哪种类型
            if ($suffix == "xlsx") {
                $reader = \PHPExcel_IOFactory::createReader(Excel2007);
            } else {
                $reader = PHPExcel_IOFactory::createReader(Excel5);
            }
        } else {
            return json([status => 1, message => 文件过大或格式不正确导致上传失败-_-!]);
        }
        //载入excel文件
        $excel = $reader->load($filePath, $encode = utf-8);
        //读取第一张表
        $sheet = $excel->getSheet(0);
        //获取总行数
        $row_num = $sheet->getHighestRow();
        //获取总列数
        $col_num = $sheet->getHighestColumn();

        $import_data = []; //数组形式获取表格数据
        for ($i = 2; $i <= $row_num; $i++) {
            $import_data[$i][nickname]  = $sheet->getCell("B" . $i)->getValue();
            $import_data[$i][phone]  = $sheet->getCell("C" . $i)->getValue();
        }

        if (empty($import_data)) {
            return json([status => 1, message => 数据解析失败]);
        }

        //校验手机号是否重复
        $phone_array = array_column($import_data, phone);
        $phone_ids = implode(,, $phone_array);
        $result_phone = db(user)
            ->field(phone)
            ->where(phone, in, $phone_ids)
            ->select();
        if (!empty($result_phone)) {
            $result_phone_array = array_column($result_phone, phone);
            $result_phone_ids = implode(,, $result_phone_array);
            return json([status => 3, message => 数据重复, result => $result_phone_ids]);
        }

        //将数据保存到数据库
        $res = db(user)->insertAll($import_data);
        if ($res) {
            return json([status => 2, message => 导入成功]);
        } else {
            return json([status => 1, message => 提交失败,请刷新重试]);
        }
    }

 

提示: 注意官方库给的环境要求以及需要开启的扩展

 

【PHP】phpoffice实现excel导入导出

原文:https://www.cnblogs.com/richerdyoung/p/11941925.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!