• 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.     }
  • 相关阅读:
    uni-app-数据缓存
    uni-app-网络请求
    uni-app-上拉加载
    uni-app-下拉刷新
    uni-app-生命周期
    uni-app字体图标
    uni-app-样式
    [Python] ValueError: Unknown resampling filter
    [Python]列表复制以及切片[:][::]解析
    LeetCode 29. 两数相除
  • 原文地址:https://www.cnblogs.com/aipiaoborensheng/p/4922509.html
Copyright © 2020-2023  润新知