zoukankan      html  css  js  c++  java
  • 【tp5.1】composer安装PHPExcel以及导入导出Excel

    一、安装PHPExcel

    1.下载:PHPExcel  https://github.com/PHPOffice/PHPExcel

    2.解压后:Classes文件夹改名为PHPExcel 

    3.把文件夹PHPExcel 放到根目录vendor文件夹下

    二、控制器

    1.调用PHPExcel

    use PHPExcel_IOFactory;
    use PHPExcel;

    2.导入

    //    导入每日流水
        public function posImport(){
            header("content-type:text/html;charset=utf-8");
            //上传excel文件
            $file = request()->file('excel');
            //将文件保存到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{
                $this->error('文件过大或格式不正确导致上传失败-_-!');
            }
            //载入excel文件
            $excel = $reader->load("$filePath",$encode = 'utf-8');
            //读取第一张表
            $sheet = $excel->getSheet(0);
            //获取总行数
            $row_num = $sheet->getHighestRow();
            //获取总列数
            $col_num = $sheet->getHighestColumn();
            $data = []; //数组形式获取表格数据
            for ($i = 2; $i <= $row_num; $i ++) {
                $data[$i]['code']  = $sheet->getCell("A".$i)->getValue();
                $data[$i]['last_code']  = substr($sheet->getCell("A".$i)->getValue(),-6);
                $time = date('Y-m-d H:i',PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell("B".$i)->getValue()));
                $data[$i]['time'] = strtotime($time);
                //将数据保存到数据库
            }
            $res = Db::name('pos_code')->insertAll($data);
            if($res){
                return redirect('/admin/pos/posCodeLog');
            }else{
                $return = [
                    'code'  =>  0,
                    'msg'   =>  '提交失败,请刷新重试'
                ];
                return json($return);
            }
        }

    3.导出

    //    导出excel
        private function outExcel($data){
            $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','时间');
            $objActSheet->setCellValue('D1','发放状态');
    
            $baseRow = 2; //数据从N-1行开始往下输出 这里是避免头信息被覆盖
            foreach ( $data as $r => $d ) {
                $i = $baseRow + $r;
                $objExcel->getActiveSheet()->setCellValue('A'.$i,$d['user_id']);
                $objExcel->getActiveSheet()->setCellValue('B'.$i,$d['price']);
                $objExcel->getActiveSheet()->setCellValue('C'.$i,$d['create_time']);
                $objExcel->getActiveSheet()->setCellValue('D'.$i,$d['status'] == 1 ? '成功' : '失败');
            }
            $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');
        }
  • 相关阅读:
    【hdu4035】Maze
    【bzoj2707】走迷宫
    【CF123E】Maze
    【CF113D】Museum
    【recording】gdoi2018
    最近公共祖先(LCA)(题目)
    回转寿司
    counting
    B
    A
  • 原文地址:https://www.cnblogs.com/BearLee/p/10484503.html
Copyright © 2011-2022 走看看