phpExcel 上传excel文档

来源:互联网 发布:linux查看默认网关命令 编辑:程序博客网 时间:2024/05/22 09:48

版本:thinkphp3.2.1

1.下载phpexcel 最新版,然后将文件的class文件的两个文件丢进Thinkphp/Library/PHPExcel(此文件自己创建);

public function uploadExcel() {    set_time_limit(0);    ini_set('memory_limit','1024M');    if (!empty($_FILES)) {        /*判断是不是excel文件*/        $tmp_file = $_FILES ['file'] ['tmp_name'];        $file_types = explode ( ".", $_FILES ['file'] ['name'] );        $file_type = $file_types [count ( $file_types ) - 1];        /*判别是不是.xls文件,判别是不是excel文件*/        if (strtolower ( $file_type ) != "xlsx" && strtolower ( $file_type ) != "xls")        {            $this->error ( '不是Excel文件,重新上传' );        }       /*上传文件到Public/upload*/        $config = array(            'exts' => array('xlsx','xls'),            'maxSize' => 3145728000,            'rootPath' =>"./Public/",            'savePath' => 'Uploads/',            'subName' => array('date','Ymd'),        );        $upload = new \Think\Upload($config);        if (!$info = $upload->upload()) {            $this->error($upload->getError());        }        /*开始导入文件夹*/        vendor("PHPExcel.PHPExcel");        $file_name=$upload->rootPath.$info['file']['savepath'].$info['file']['savename'];        $extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));//判断导入表格后缀格式        /*数据量较大时会出现内存溢出的问题*/        $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;        $cacheSettings = array();        \PHPExcel_Settings::setCacheStorageMethod($cacheMethod,$cacheSettings);        if ($extension == 'xlsx') {            $objReader =\PHPExcel_IOFactory::createReader('Excel2007');            $objPHPExcel =$objReader->load($file_name, $encode = 'utf-8');        } else if ($extension == 'xls'){            $objReader =\PHPExcel_IOFactory::createReader('Excel5');            $objPHPExcel =$objReader->load($file_name, $encode = 'utf-8');        }        $objPHPExcel = \PHPExcel_IOFactory::load($file_name);        $sheet =$objPHPExcel->getSheet(0);        $highestRow = $sheet->getHighestRow();//取得总行数        $highestColumn =$sheet->getHighestColumn(); //取得总列数        $data=$objPHPExcel->getActiveSheet()->toArray();        //去掉第一行,因为第一行是目录        unset($data[0]);        $oldnum=count($data);        $ordernos = array();       foreach($data as $k =>$v){           $ordernos[] = $v[0];        }        //excel表格去重复        $unique_arr = array_unique ( $ordernos );        if(count($ordernos)!=count($unique_arr)){            $repeat_arr = array_diff_assoc ( $ordernos, $unique_arr );            $this->error("Excel表中出现重复的订单号:{".implode(',',$repeat_arr)."},请重新检查");        }        //考虑订单在数据库是否已经存在        $exinum=array();        $order_res = M('表min')->field('orderno')->where(array('orderno'=>array('in' , $ordernos)))->select();        //顾虑掉重复的数据        if(count($order_res)>0){            foreach($data as $k=>$v){              if(in_array($v[0],array_column($order_res,"orderno"))){                  $exiorderno[]=$v[0];                  unset($data[$k]);              }            }        }        $count= count($data);        if($count==0){            $this->error("Excel表中的订单数据在数据库中都存在");        }        $pagesize = 1;        $pagenum  = ceil($count/$pagesize);        $sucnum=0;        $errornum=0;        $error_orderno=array();        for($i =0 ;$i < $pagenum ; $i++){            $start = ($i-1)*$pagesize;            $dataList = array_slice($data,$start,$pagesize );            $arr=array();            foreach($dataList as $k=>$v){                $arr[$k]['xxxx'] =$dataList[$k][0];                $arr[$k]['xxxx'] =$dataList[$k][1];            }            $res=M('表名')->addAll($arr);            if(!$res){                $errornum+=count($dataList);                $error_orderno[]=$dataList[$k]['0'];            }else{                $sucnum+=count($dataList);            }        }        $exinum=count($exiorderno);        $error_orderno=count($error_orderno)==0 ? "无": implode(',',$error_orderno);       $this->success("Excel数据去掉第一行的目录总共{$oldnum}条,数据库已经存在的{$exinum}条分别是:{".implode(',',$exiorderno)."},成功导入的总共{$sucnum}条,出现错误:{$errornum}条,出现错误的订单号:{$error_orderno}");        unlink($file_name);   } else {       $this->error("请选择上传的文件");    }}


原创粉丝点击