网站首页php

PHP导出导入excel类

发布时间:2016-03-24 01:47:22编辑:阅读(5999)

           

    1. 下载PHPExcel,  From链接: http://phpexcel.codeplex.com/releases/view/119187

    2. Excel导出数据组合函数:

          /**
          *生成execl内容
          *@param $expTitle 标题
          *@param $expCellName 列名
          *@param $expTableData 数据
          *@param $objExcel PHPExcel 对象
          *
          *Return $objExcel PHPExcel 对象
          **/
        function makeExcel($expTitle,$expCellName,$expTableData,$objExcel){        
            $objProps = $objExcel->getProperties();       
            $objProps->setCreator($expTitle);
            $objProps->setTitle($expTitle);
            $objProps->setSubject($expTitle);
            $objExcel->setActiveSheetIndex(0);
            $objActSheet = $objExcel->getActiveSheet();
            $objActSheet->setTitle($expTitle);
                    
            $cellNum = count($expCellName);
            $dataNum = count($expTableData);
            $cellName = 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','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT',
            'AU','AV','AW','AX','AY','AZ');
            $objExcel->getActiveSheet()->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
            $objExcel->getActiveSheet()->setCellValue('A1', $expTitle.' 生成时间:'.date('Y-m-d H:i:s'));//合并单元格生成标题
                
            for($i=0;$i<$cellNum;$i++){
                   $objExcel->getActiveSheet()->setCellValueExplicit($cellName[$i].'2', $expCellName[$i][1], 
                   PHPExcel_Cell_DataType::TYPE_STRING);
            } 
            for($i=0;$i<$dataNum;$i++){
                   for($j=0;$j<$cellNum;$j++){
                    $objExcel->getActiveSheet()->setCellValueExplicit($cellName[$j].($i+3), 
                    $expTableData[$i][$expCellName[$j][0]], PHPExcel_Cell_DataType::TYPE_STRING);
                   }             
            } 
            return $objExcel;
        }


    3.在程序中调用导出excel:

    public function actionexportExcel(){        
            require_once('Excel/PHPExcel.php');       
            require_once('Excel/PHPExcel/Writer/Excel5.php');  
            //require('Excel/PHPExcel/Writer/Excel2007.php'); //使用Excel2007导出.xlsx文件
            
            $objExcel  = new PHPExcel();       
            $objWriter  = new PHPExcel_Writer_Excel5($objExcel); 
            //$objWriter    =new PHPExcel_Writer_Excel2007($objExcel);        
            $cellname  = array(
                            array('id','ID'),
                            array('name','用户名'),
                            array('phone','手机'),
                            array('email','邮箱'),
                            array('addtime','注册时间'),
                        );
            $dbo   =   new Db();
            $dataset=  $dbo->getAll("SELECT id,name,phone,email,additm from FROM w_user LIMIT 0,100");
            
            $objExcel    = makeExcel('导出人员', $cellname, $dataset, $objExcel);
            $outputFilePath = "Upload/";
            $outputFileName  = "Members" . date('YmdHis') . ".xls";
            //$outputFileName  = "Members" . date('YmdHis') . ".xlsx"; //使用Excel2007导出.xlsx文件
            $objWriter->save($outputFilePath . $outputFileName);
            
            /**下载文件**/
            Header("Content-type: application/octet-stream");
            Header("Accept-Ranges: bytes");
            Header("Accept-Length: ".filesize($outputFilePath . $outputFileName));
            Header("Content-Disposition: attachment; filename=" . $outputFileName);
            $file = fopen($outputFilePath . $outputFileName,"r");
            echo fread($file,filesize($outputFilePath . $outputFileName));
            fclose($file);
        }


    4.excel导入数据组合函数

    function excelToArray($filename, $encode='utf-8'){
        require_once('Excel/PHPExcel.php');
        
        $objExcel  = new PHPExcel();
        $objReader = PHPExcel_IOFactory::createReader('Excel5');    //or Excel2007
        $objReader->setReadDataOnly(true);
        $objPHPExcel= $objReader->load($filename);
        $objWorksheet= $objPHPExcel->getActiveSheet();
        $highestRow= $objWorksheet->getHighestRow(); 
        $highestColumn= $objWorksheet->getHighestColumn(); 
        $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
        $excelData= array(); 
        /***跳过第一行标题栏***/
        for ($row = 2;$row<=$highestRow;$row++) { 
            for($col=0; $col<$highestColumnIndex; $col++) { 
                $excelData[$row][] = strval($objWorksheet->getCellByColumnAndRow($col, $row)->getValue());
            } 
        }
        return $excelData;
    }
    或者:
    function excelToArray($path)  {
            $type = 'Excel2007';//设置为Excel5代表支持2003或以下版本,Excel2007代表2007版  
            $xlsReader = PHPExcel_IOFactory::createReader($type);    
            $xlsReader->setReadDataOnly(true);  
            $xlsReader->setLoadSheetsOnly(true);  
            $Sheets = $xlsReader->load($path);  
            //开始读取上传到服务器中的Excel文件,返回一个二维数组
            $dataArray = $Sheets->getSheet(0)->toArray();  
            return $dataArray;
    }


    5.在程序中处理上传excel文件,导入数据。

    public function doimportjiaolianAction(){
        if (! empty( $_FILES ['file_excel'] ['name'] ))
        {
            $tmp_file = $_FILES ['file_stu']['tmp_name'];
            $file_types = explode ( ".", $_FILES ['file_stu']['name'] );
            $file_type = $file_types [count ( $file_types ) - 1];
            /*判别是不是.xls或者.xlsx文件,判别是不是excel文件*/
            if (strtolower ( $file_type ) != "xls" && strtolower ( $file_type ) != "xlsx")
            {
                js_msg( '不是Excel文件,重新上传', 'history.back()' );
            }
            /*设置上传路径*/
            $inputFilePath = $config['uploadpath'] . '/Excel/';
            $inputFileName  = "Order" . date('YmdHis') . $file_type;
            /*是否上传成功*/
            if (! copy ($tmp_file, $inputFilePath . $inputFileName )) 
            {
                js_msg( '上传失败', 'history.back()' );
            }
            /*
             * 对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中
             * 注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入
            */
            $res = $this->excelToArray( $inputFilePath . $inputFileName );
            if(empty($res)){
                js_msg('未找到数据', 'history.back()');
            }
            /*对生成的数组进行数据库的写入*/
            foreach ( $res as $k => $v ) 
            {
                    $name= $v[1];
                    $phone= $v[2];
                    $email= $v[3];
                    $addtime= $v[4];
                    $rows=array(
                        'name'=>$name,
                        'phone'=>$phone,
                        'email'=>$email,
                        'addtime'=>$addtime,
                    );
                    if (!(new Table('user'))->add($rows)) {
                        js_msg( '导入数据库失败' );
                    }    
            }
            js_msg( '导入数据成功', '', '/user.html' );
        }else{
            js_msg( '上传未成功.', 'history.back()' );
        }
    }


    处理可以加上数据校验,及校验结果预览,确定无误后再入库。







评论