zoukankan      html  css  js  c++  java
  • laravel 使用 PHPExcel 导出

    1、下载 PHPExcel

    直接去github下载
    https://github.com/PHPOffice/PHPExcel

    2、在 app 目录下新建 libs 目录,将下载的 PHPExcel 放入 libs 目录下,如下图

    3、在项目根目录的 composer.json 文件中添加 "app/libs/PHPExcel/classes" 如下图所示

    4、在项目根目录下运行cmd,执行语句 composer dumpautoload

    5、具体实现代码如下:

    <?php
    
    namespace AppHttpControllersAdmin;
    
    use IlluminateFoundationApplication;
    use IlluminateHttpRequest;
    use AppHttpControllersController;
    use IlluminateSupportFacadesArtisan;
    use AppModelsMember;
    use AppModelsSpecialSubject;
    
    class ExcelController extends Controller
    {
        
        public function export(Request $request){
            ini_set('memory_limit','500M');
            set_time_limit(0);//设置超时限制为0分钟
            
            $fileName = '用户信息'.'.xls';  // 文件名称
            
            $select['search'] = $request->input("ex_search");
            $select['is_wanshan'] = (int)$request->input("ex_wanshan");
            
            $info = Member::orderBy("id", "desc");
            
            if (!empty($select['search'])){
                $info = $info->where("nickname",'like', '%'.$select['search'].'%')->orWhere("realname",'like', '%'.$select['search'].'%')->orWhere("mobile",'like', '%'.$select['search'].'%');
            } 
            if ($select['is_wanshan'] == 1){
                $info = $info->whereNotNull("realname")->whereNotNull("mobile")->whereNotNull("email")->whereNotNull("company_name")->whereNotNull("industry");
            }
            $info = $info->get()->toArray();
            if(empty($info)){
                return false;
            }
            
            foreach($info as $k=>$v){
                $kk = $k + 1;
                // $data[$kk]['avatar'] = $v['avatar'];
                $data[$kk]['nickname'] = $v['nickname'];
                if($v['gender'] == 2){
                    $data[$kk]['gender'] = '女';
                }else{
                    $data[$kk]['gender'] = '男';
                }
                $data[$kk]['diqu'] = $v['wx_country'].' '.$v['wx_province'].' '.$v['wx_city'];
                $data[$kk]['realname'] = $v['realname'];
                $data[$kk]['mobile'] = "	" .$v['mobile']; //数据前面加上 "	" 则可以避免自动转化为科学计数法
                $data[$kk]['company_name'] = $v['company_name'];
                $data[$kk]['email'] = $v['email'];
                if($v['is_news'] == 1){
                    $data[$kk]['is_news'] = '是';
                }else{
                    $data[$kk]['is_news'] = '否';
                }
                $data[$kk]['industry'] = $v['industry'];
                $data[$kk]['position'] = $v['position'];
                $data[$kk]['company_address'] = $v['province'].$v['city'].$v['region'];
                if($v['is_access'] == 1){
                    $data[$kk]['is_access'] = '是';
                }else{
                    $data[$kk]['is_access'] = '否';
                }
                
                $ids = explode(',',$v['interest']);
                $list = SpecialSubject::whereIn('id',$ids)->get(['id','title','short'])->toArray();
                
                $name = [];
                foreach($list as $vv){
                    $name[] = $vv['title'].$vv['short'];
                }
                $data[$kk]['interest'] = implode(',',$name);
                if($v['is_enroll'] == 1){
                    $data[$kk]['is_enroll'] = '是';
                }else{
                    $data[$kk]['is_enroll'] = '否';
                }
                $data[$kk]['prev_path'] = $v['prev_path'];
            }
            
            // Excel 表头内容
            $columnName = array('用户名','性别','地区','姓名','手机号','公司名称','公司邮箱','是否接收资讯更新','所属行业','职位','公司所在地','是否已接入穿山甲','感兴趣的话题','是否报名穿山甲扶持计划','补全资料的前一个路径');
            
            // Excel 表格数据对应的查询出来的数据字段值
            $column = array('nickname','gender','diqu','realname','mobile','company_name','email','is_news','industry','position','company_address','is_access','interest','is_enroll','prev_path');
            
            // 表格列数
            $cell = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
    
            $count = count($column);
            $objPHPExcel = new PHPExcel();
            $objPHPExcel->setActiveSheetIndex(0);
            foreach($columnName as $k => $v){
                $objPHPExcel->getActiveSheet()->setCellValue($cell[$k].'1', $v);
            }
            foreach ($data as $key => $value) {
                $i = $key;
                for($j=0;$j<$count;$j++){
                    // $objPHPExcel->getActiveSheet()->setCellValue($cell[$j].($i+1),  iconv('gbk','UTF-8',$value[$column[$j]]));
                    $objPHPExcel->getActiveSheet()->setCellValue($cell[$j].($i+1), $value[$column[$j]]);
                }
            }
            ob_end_clean();//清除缓冲区,避免乱码
            // Redirect output to a client’s web browser (Excel5)
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="'.$fileName.'"');
            header('Cache-Control: max-age=0');
            // If you're serving to IE 9, then the following may be needed
            header('Cache-Control: max-age=1');
     
            // If you're serving to IE over SSL, then the following may be needed
            header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
            header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
            header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
            header ('Pragma: public'); // HTTP/1.0
     
            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
            $objWriter->save('php://output');
            exit;
    
        }
    }
  • 相关阅读:
    剑指 Offer 43. 1~n整数中1出现的次数
    剑指 Offer 54. 二叉搜索树的第k大节点(递归)
    第三个JSP作业
    第二个JSP作业-用循环结构输出三行五列的table
    第二个JSP作业-编写jsp页面,输出大写、小写英文字母表
    第一个JSP作业
    安卓课设
    第十次作业
    第八次作业
    第九次作业
  • 原文地址:https://www.cnblogs.com/Jessie-candy/p/13539901.html
Copyright © 2011-2022 走看看