• ThinkPHP导入Excel文件(使用PHPExcel)


    一、

    主要知识点,用PHPExcel导入Excel数据经过这几天测试还是可以,xls,xlsx都可以获取Excel的数据。
    下载地址:http://phpexcel.codeplex.com/

    O、开发思路

      1.先把Excel文件上传到服务器,只是为了获取文件的信息$FILES['tmp_name']

      2.通过借助插件获取服务器Excel文件内容$data,先打印看数据是否对着

      3.在循环中写入数据库

    一、上传Excel文件,使用PHP里自带的上传方法 “ThinkUpload();”,可以很方便的实现。为此我整理下使用这个方法的最简单方式

    复制代码
    /**
     * TODO 上传文件方法
     * @param $fileid form表单file的name值
     * @param $dir 上传到uploads目录的$dir文件夹里
     * @param int $maxsize 最大上传限制,默认1024000 byte
     * @param array $exts 允许上传文件类型 默认array('gif','jpg','jpeg','bmp','png')
     * @return array 返回array,失败status=0 成功status=1,filepath=newspost/2014-9-9/a.jpg
     */
    function uploadfile($fileid,$dir,$maxsize=5242880,$exts=array('gif','jpg','jpeg','bmp','png'),$maxwidth=430){
        $upload = new ThinkUpload();// 实例化上传类
        $upload->maxSize   =     $maxsize;// 设置附件上传大小,单位字节(微信图片限制1M
        $upload->exts      =     $exts;// 设置附件上传类型
        $upload->rootPath  =     './uploads/'; // 设置附件上传根目录
        $upload->savePath  =     $dir.'/'; // 设置附件上传(子)目录
        // 上传文件
        $info   =   $upload->upload();
    
        if(!$info) {// 上传错误提示错误信息
            return array(status=>0,msg=>$upload->getError());
        }else{// 上传成功后返回要调用的信息
            return array(status=>1,msg=>'上传成功',filepath=>$info[$fileid]['savepath'].$info[$fileid]['savename']);
        }
    }
    复制代码

    这里默认上传到ThinkPHP入口文件index.php所在的文件夹uploads,此方法返回一个数据,状态status=1时为成功,也建议大家在写功能模块时或做封装时,整个系统的在架构初期应该有约定,在必要的情况下返回值用数组形式,成功返回

    return array(status=>1,data=>....,info=>.....)

    失败时可以返回

    array(status->0,info=>'可以说明出错的原因',....)

    这样用统一的方式有利于规范开发,团队协作时看代码时可以提高效率,减少思维运转,说远了,上传的方法调用方式如下:

    复制代码
         //excel 文件
            if(!empty($_FILES['xls']['name'])){
                $upload=uploadfile('xls','tempxls',5242880,array('xls','xlsx'));
                if($upload['status']){
                    $path=$upload['filepath'];
                }else{
                    $this->error($upload['msg']);
                }
            }
    复制代码

    二、获取Excel数据

      1.首先需要引入PHPExcel的类库

    require_once 'module/PHPExcel/Classes/PHPExcel/IOFactory.php';

      2.获取Excel第0张表即(Sheet1)

    //获取excel文件
    $objPHPExcel = PHPExcel_IOFactory::load("uploads/$path");
    $objPHPExcel->setActiveSheetIndex(0);
    $sheet0=$objPHPExcel->getSheet(0);//excel的数据

      3.获取行数,并把数据读取出来$data数组

    复制代码
         $rowCount=$sheet0->getHighestRow();//excel行数
            $data=array();
    把excel里需要到的数据循环出来放在一个数组里,然后添加到数据库中 for ($i = 2; $i <= $rowCount; $i++){ $item['name']=$this->getExcelValue($sheet0,'A'.$i); $item['sex']=$this->getExcelValue($sheet0,'B'.$i); $item['contact']=$this->getExcelValue($sheet0,'C'.$i); $item['remark']=$this->getExcelValue($sheet0,'D'.$i); $item['addtime']=$this->getExcelValue($sheet0,'E'.$i); $data[]=$item; }
    复制代码

    三、最后保存到数据

    复制代码
         $success=0;
            $error=0;
            $sum=count($data);
            foreach($data as $k=>$v){
                if(M('temp_area3')->data($v)->add()){
                    $success++;
                }else {
                    $error++;
                }
            }
    
            echo "总{$sum}条,成功{$success}条,失败{$error}条。";



    二、

    用phpexcel导入数据到数据库

     
    浏览:1581 发布日期:2014/07/15 分类:功能实现
    用phpexcel导入数据到数据库,自己写的,不知道有没有什么问题
      1. <?php
      2. class ExcelAction extends Action {
      3.     function index(){
      4.     $this->display();
      5.     
      6.     }

      7.     function addexl(){
      8.     import('ORG.Net.UploadFile');
      9.     $upload = new UploadFile();// 实例化上传类
      10.     $upload->maxSize  = 3145728 ;// 设置附件上传大小
      11.     $upload->allowExts  = array('jpg', 'gif', 'png', 'jpeg','xls');// 设置附件上传类型
      12.     $upload->savePath =  './Public/Uploads/';// 设置附件上传目录

      13.     //$upload->saveRule = date('Ymdhm');
      14.     if(!$upload->upload()) {
      15.         $this->error($upload->getErrorMsg());    // 上传错误提示错误信息
      16.     }else{
      17.             $info =  $upload->getUploadFileInfo();// 上传成功 获取上传文件信息
      18.             $this->success('上传成功');
      19.             $file['pic_file']=$upload->savePath.$info[0]['savename'];//获取上传文件资源
      20.             //echo $data['pic_file'];
      21.     }
      22.     Vendor("Classes.PHPExcel");//引入phpexcel类(注意你自己的路径)
      23.     Vendor("Classes.PHPExcel.IOFactory");     
      24.     Vendor("Classes.PHPExcel.Reader.Excel5"); 
      25.     Vendor("Classes.PHPExcel.Reader.Excel2007"); 
      26.     $objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format 
      27.     $objPHPExcel = $objReader->load($file['pic_file']); 
      28.     $excelarray=$objPHPExcel->getsheet(0)->toArray();
      29.     array_shift($excelarray);//将第一行移出数组
      30.     unlink($file['pic_file']);//删除上传文件
      31.     foreach($excelarray as $k=>$v){
      32.         $data[$k]['sf']=$v[0];//$data[$k]['sf']对应数据库字段,$v[0]对应excel索引
      33.         $data[$k]['ksh']=$v[1];
      34.         $data[$k]['zkzh']=$v[2];
      35.         $data[$k]['xm']=$v[3];
      36.         $data[$k]['xbdm']=$v[4];
      37.         $data[$k]['sfzh']=$v[5];
      38.         $data[$k]['tdcj']=$v[6];
      39.         $data[$k]['tdzy']=$v[7];
      40.         $succ_result=M('date')->addAll($data)//也可以在循环中插入数据
      41.     }
      42.     //dump($data);die();
      43.     if($succ_result=M('date')->addAll($data)){
      44.         echo "插入成功".$succ_result."条数据!!!<br>";
      45.     }
      46.     
      47. }
      48. }
      49. ?>   

    三、

    PHPExcel类添加excel文件中的数据到Mysql中

     
    浏览:1410 发布日期:2014/11/05 分类:基础算法

    如题
    不说别的了,直接上代码。本人是个菜菜,刚学thinkphp框架,请各位高手多多指教!!测试过可以添加,不知道文件太大了效率怎么样。

      1. <?php
      2. // 本类由系统自动生成,仅供测试用途
      3. class IndexAction extends Action {
      4.     public function index(){
      5.         $this->display();
      6.     }

      7.     Public function upload(){
      8.         import('ORG.Net.UploadFile');
      9.         $upload = new UploadFile();// 实例化上传类
      10.         $upload->maxSize  = 3145728 ;// 设置附件上传大小
      11.         $upload->allowExts  = array('xls','xlsx','csv');// 设置附件上传类型
      12.         $upload->savePath =  './Public/Uploads/';// 设置附件上传目录
      13.          if(!$upload->upload()) {// 上传错误提示错误信息
      14.         $this->error($upload->getErrorMsg());
      15.          }else{// 上传成功 获取上传文件信息
      16.         $info =  $upload->getUploadFileInfo();
      17.          }
      18.         
      19.          //加载第三方类库PHPExcel
      20.          vendor('phpexcel.PHPExcel');
      21.          vendor('phpexcel.PHPExcel.IOFactory');
      22.          vendor('phpexcel.PHPExcel.Reader.Excel5');
      23.          vendor('phpexcel.PHPExcel.Reader.Excel2007');
      24.          
      25.          // 加载excel文件
      26.          $inputfilename=$info[0]['savepath'].$info[0]['savename'];
      27.          $extension=$info[0]['extension'];
      28.          switch ($extension) {
      29.              case 'xls':
      30.                  $objReader = new PHPExcel_Reader_Excel5();
      31.                  break;
      32.              case 'xlsx':
      33.                  $objReader = new PHPExcel_Reader_Excel2007();
      34.                  break;
      35.              case 'csv':
      36.                  $objReader = new PHPExcel_Reader_CSV();
      37.                  break;
      38.              default:
      39.                  $this->error('上传的文件类型不匹配');
      40.                  break;
      41.              }
      42.          
      43.          $objPHPExcel = $objReader->load($inputfilename);
      44.          $currentsheet = $objPHPExcel->getActiveSheet();//获取活动工作薄
      45.          $allcolumn = $currentsheet->getHighestColumn();//获取最大列数
      46.          $allrow = $currentsheet->getHighestRow();//获取最大行数
      47.          $allcolumnindex = PHPExcel_Cell::columnIndexFromString($allcolumn);//将列数的字母索引转换成数字
      48.          //建立模型
      49.          $data = M('data');
      50.          //读取excel文件中的数据
      51.          for($row=2;$row<=$allrow;$row++){
      52.              $str=array();
      53.              for($column=0;$column<$allcolumnindex;$column++){
      54.                  $str[$column]=$currentsheet->getCellByColumnAndRow($column,$row)->getValue();                 
      55.              }
      56.              //赋值到数组中
      57.              $record=array(
      58.                  'username' => $str[0],
      59.                  'password' => $str[1],
      60.                  'idcard' => $str[2],
      61.                  );
      62.             //把数据插入到数据库中
      63.              $data->create($record);
      64.              $data->add();
      65.          }

      66.      }
      67. }

    四、

    phpexcel导出

     
    浏览:1530 发布日期:2015/02/05 分类:用法示例 关键字: phpexcel导出,excel导出

    这里只粘贴了使用的代码,里面需要引用phpexcel,在上面搜索phpexcel就有很多下载的

    1. /**
    2.      * 客户导出
    3.      *
    4.      **/
    5.     public function excelExport($customerList=false){
    6.         C('OUTPUT_ENCODE', false);
    7.         import("ORG.PHPExcel.PHPExcel");
    8.         $objPHPExcel = new PHPExcel();    
    9.         $objProps = $objPHPExcel->getProperties();
    10.         $objPHPExcel->setActiveSheetIndex(0);     
    11.         $objActSheet = $objPHPExcel->getActiveSheet(); 
    12.            
    13.         $objActSheet->setTitle('Sheet1');
    14.         $ascii = 65;
    15.         $cv = '';
    16.         //联系人字段
    17.         $contacts_fields_list = array();
    18.         $contacts_fields_list[0]['field'] = 'name';
    19.         $contacts_fields_list[0]['name'] = '用户名';
    20.         $contacts_fields_list[1]['field'] = 'telephone';
    21.         $contacts_fields_list[1]['name'] = '电话';
    22.         
    23.         foreach($contacts_fields_list as $field){
    24.             $objActSheet->setCellValue($cv.chr($ascii).'1', $field['name']);
    25.             $ascii++;
    26.             if($ascii == 91){
    27.                 $ascii = 65;
    28.                 $cv .= chr(strlen($cv)+65);
    29.             }
    30.         }
    31.         
    32.         /*$where['owner_role_id'] = array('in',implode(',', getSubRoleId()));
    33.         $where['is_deleted'] = 0;*/
    34.         $list = M('user')->select();
    35.         $ascii = 65;
    36.         $cv = '';
    37.         $i = 2;
    38.         foreach($list as $val){
    39.             foreach($contacts_fields_list as $valu){
    40.                 //防止使用科学计数法,在数据前加空格
    41.                 if($valu['field'] == 'telephone' || $valu['field'] =='qq'){
    42.                     $objActSheet->setCellValue($cv.chr($ascii).$i, ' '.$val[$valu['field']]);
    43.                 }else{
    44.                     $objActSheet->setCellValue($cv.chr($ascii).$i, $val[$valu['field']]);
    45.                 }
    46.                 
    47.                 $ascii++;
    48.                 if($ascii == 91){
    49.                     $ascii = 65;
    50.                     $cv .= chr(strlen($cv)+65);
    51.                 }
    52.             }
    53.             $ascii = 65;
    54.             $cv = '';
    55.             $i++;
    56.         } 

    57.         $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    58.         ob_end_clean();
    59.         header("Content-Type: application/vnd.ms-excel;");
    60.         header("Content-Disposition:attachment;filename=5kcrm_user_".date('Y-m-d',mktime()).".xls");
    61.         header("Pragma:no-cache");
    62.         header("Expires:0");
    63.         $objWriter->save('php://output'); 
    64.     }
    复制代码

    这里只粘贴了使用的代码,里面需要引用phpexcel,在上面搜索phpexcel就有很多下载的

    再来一个简单的导出的方法:

      1. public function oexcel()
      2.     {
      3.         header('Content-Type: application/vnd.ms-excel');
      4.         header('Content-Disposition: attachment; filename=user.xls');
      5.         header('Pragma: no-cache');
      6.         header('Expires: 0');
      7.         $title = array('手机', '昵称');
      8.         $data = M('user')->field("login,uname")->select();
      9.         echo iconv('utf-8', 'gbk', implode(" ", $title)), " ";
      10.         foreach ($data as $value) {
      11.             echo iconv('utf-8', 'gbk', ' '.implode(" ", $value)), " ";
      12.         }

      13.     }
  • 相关阅读:
    putty远程登录,no supported authentication methods available解决方法(腾讯云)
    spring boot 集成 springbootstarterquartz 集群版配置
    排序算法
    密码发生器
    分解质因数
    python基础面试题
    计算输入密码的时间
    论文解读(GCC)《Efficient Graph Convolution for Joint Node RepresentationLearning and Clustering》 Learner
    期望、方差、协方差 Learner
    论文解读(LGAE)《Simple and Effective Graph Autoencoders with OneHop Linear Models》 Learner
  • 原文地址:https://www.cnblogs.com/aipiaoborensheng/p/4922509.html
Copyright © 2020-2023  润新知