• 关于PHPExcel上传Excel单元格富文本和时间类型读取数据问题


    当用PHPExcel做Excel上传文件读取数据时,print_r出来的数据,竟然发现其中有几个单元格返回的是PHPExcel富文本对象,而且时间类型的单元格返回的是一个不是时间戳的五位数。就像下图那样。

    解决代码:

    //读取到的数据,保存到数组$arr中
    $excelData[$currentRow][$currentColumn] =(string) $currentSheet-> getCell($address)-> getValue(); //解决了返回的是富文本对象问题

     后面的代码加了一个 excelTime函数。解决了时间类型问题。

    全部代码:

    public function uploadBatch(){  
            header("Content-type: text/html;charset=utf-8");//设置页面内容是html编码格式是utf-8  
            $cell=array();  
            $uploads="uploads";  
            $upload = new ThinkUpload();// 实例化上传类  
            $upload->maxSize   =     5242880 ;// 设置附件上传大小  
            $upload->exts      =     array('xlsx','xls','csv');// 设置附件上传类型  
            $upload->rootPath  =      './'.$uploads.'/gz/'; // 设置附件上传根目录  
            $upload->subName  = array('date','Ym');  
            // 上传单个文件   
            $info = $upload->uploadOne($_FILES['excel']);  
            if(!$info) {// 上传错误提示错误信息  
                $this->error($upload->getError());  
            }else{
                //上传Excel成功  
                $exts = $info['ext'];  
                $file_name=$uploads.'/gz/'.$info['savepath'].$info['savename'];
                $res=$this->getdata($file_name,$exts);  
                print_r($res);
                //循环读取每行数据,进行写入数据库  
                foreach ( $res as $k => $v ){  
                    if ($k != 0){
                        $data ['Name'] = $v [B];  
                        $data ['Site'] =  $v [C];  
                        print_r($data);
                    }
                }
                if($result!=0){
                    $this->success("批量导入成功!", U("Gzjzgl/addBatchSuccess"));
                }else{
                    $this->error("批量导入失败!");
                }
            }
        }
        
        public function showData(){  
            header("Content-type: text/html;charset=utf-8");//设置页面内容是html编码格式是utf-8  
            $cell=array();  
            $uploads="uploads";  
            $upload = new ThinkUpload();// 实例化上传类  
            $upload->maxSize   =     5242880 ;// 设置附件上传大小  
            $upload->exts      =     array('xlsx','xls','csv');// 设置附件上传类型  
            $upload->rootPath  =      './'.$uploads.'/gz/'; // 设置附件上传根目录  
            $upload->subName  = array('date','Ym');  
            // 上传单个文件   
            $info = $upload->uploadOne($_FILES['excel']);  
            if(!$info) {// 上传错误提示错误信息  
                $this->error($upload->getError());  
            }else{
                //上传Excel成功  
                $exts = $info['ext'];  
                $file_name=$uploads.'/gz/'.$info['savepath'].$info['savename'];
                $res=$this->getdata($file_name,$exts);  
                $status="success";
                print_r($res);
                $data=array(
                    'data' => $res,
                    'status' => $status,
                );
                $this->ajaxReturn($data);
            }
        }
      
        //获取excel文件、读取数据方法  
        public function getdata($file_name,$exts='xls'){  
            //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入  
            import("Org.Util.PHPExcel");  
            //创建PHPExcel对象,注意,不能少了
            $PHPExcel=new PHPExcel();
            if ($exts =='xlsx') {
                import("Org.Util.PHPExcel.Reader.Excel2007");  
                $PHPReader=new PHPExcel_Reader_Excel2007();  
            } else if ($exts =='xls') {
                import("Org.Util.PHPExcel.Reader.Excel5");  
                $PHPReader=new PHPExcel_Reader_Excel5();  
            }
            //载入文件
            $PHPExcel=$PHPReader->load($file_name);  
            //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推  
            $currentSheet=$PHPExcel->getSheet(0);  
            //获取总列数
            $allColumn=$currentSheet->getHighestColumn();
            //获取总行数
            $allRow=$currentSheet->getHighestRow();
            $excelData = array();
            //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始
            for($currentRow=2;$currentRow<=$allRow;$currentRow++){
                //从哪列开始,A表示第一列
                for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
                    //数据坐标
                    $address=$currentColumn.$currentRow;
                    if($currentColumn=='I' || $currentColumn=='J'){
                        $excelData[$currentRow][$currentColumn] = (string)$this->excelTime($currentSheet-> getCell($address)-> getValue());
                    }else{
                        //读取到的数据,保存到数组$arr中
                        $excelData[$currentRow][$currentColumn] =(string) $currentSheet-> getCell($address)-> getValue();
                    }
                }
            }
            return $excelData;
        }
        
        function excelTime($date, $time = false) {
            if(function_exists('GregorianToJD')){
                if (is_numeric( $date )) {
                $jd = GregorianToJD( 1, 1, 1970 );
                $gregorian = JDToGregorian( $jd + intval ( $date ) - 25569 );
                $date = explode( '/', $gregorian );
                $date_str = str_pad( $date [2], 4, '0', STR_PAD_LEFT )
                ."-". str_pad( $date [0], 2, '0', STR_PAD_LEFT )
                ."-". str_pad( $date [1], 2, '0', STR_PAD_LEFT )
                . ($time ? " 00:00:00" : '');
                return $date_str;
                }
            }else{
                $date=$date>25568?$date+1:25569;
                /*There was a bug if Converting date before 1-1-1970 (tstamp 0)*/
                $ofs=(70 * 365 + 17+2) * 86400;
                $date = date("Y-m-d",($date * 86400) - $ofs).($time ? " 00:00:00" : '');
            }
          return $date;
        }
  • 相关阅读:
    @SpringBootApplication
    springboot自动装配介绍
    WebServerInitializedEvent &ApplicationRunner
    springboot 潜入式web容器
    Unable to import maven project: See logs for details
    spring boot2 运行环境
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war
    DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing
    idea中maven下载jar包不完整问题
    Python_报错:SyntaxError: EOL while scanning string literal
  • 原文地址:https://www.cnblogs.com/zzuuoo666/p/8966174.html
Copyright © 2020-2023  润新知