• thinkcmf,thinkphp,表格导入(PHPexcel)的实现,新手向(3.2)


    对于新手来说,可以把表格中的数据导入进数据库那是十分好玩的一件事,我自己实现了一下网上的写法,基于PHPexcel实现的表格导入,踩了2个小时的坑,最终实例!

    因为在thinkcmf中自己添加了phpexcel所以可以直接拿过来用,如果没有则可以自己添加,直接百度phpexcel就可以了,就是下面的文件夹和文件

    对于thinkcmf来说它建有自己单独的model类我们可以把下面的代码放到单独的model类里面可以重复使用,下面上代码

    --------------------------------------------------我 是 分 割 线--------------------------------------------------------------------------------

    1.新建可以处理phpexcel的model类ExcelModel.class.php

     1 <?php
     2   namespace ThinkModel;//自己新建一个model类
     3   use ThinkModel;
     4   class ExcelModel extends Model {
     5   protected $tableName = 'products_log';
     6   
     7   public function __construct() {
     8   
     9     /*导入phpExcel核心类 SPAPP_PATH为存放phpexcel路径的定义,在入口文件index.php定义*/
    10   require_once SPAPP_PATH.'Core/Library/Vendor/PHPExcel/PHPExcel.php';
    11   require_once SPAPP_PATH.'Core/Library/Vendor/PHPExcel/PHPExcel/Writer/Excel5.php';     // 用于其他低版本xls 
    12   require_once SPAPP_PATH.'Core/Library/Vendor/PHPExcel/PHPExcel/Writer/Excel2007.php'; // 用于 excel-2007 格式  
    13   }
    14 
    15 
    16 //导入excel内容转换成数组,import方法要用到 
    17 public function import($filePath){
    18   $this->__construct();
    19   $PHPExcel = new PHPExcel();//实例化,一定要注意命名空间的问题加 
    20 
    21   /**默认用excel2007读取excel,若格式不对,则用之前的版本进行读取*/ 
    22   $PHPReader = new PHPExcel_Reader_Excel2007(); 
    23     if(!$PHPReader->canRead($filePath)){ 
    24       $PHPReader = new PHPExcel_Reader_Excel5(); 
    25       if(!$PHPReader->canRead($filePath)){ 
    26         echo 'no Excel'; 
    27         return; 
    28       } 
    29     } 
    30   
    31   $PHPExcel = $PHPReader->load($filePath); 
    32   $currentSheet = $PHPExcel->getSheet(0);  //读取excel文件中的第一个工作表
    33   $allColumn = $currentSheet->getHighestColumn(); //取得最大的列号
    34   $allRow = $currentSheet->getHighestRow(); //取得一共有多少行
    35   $erp_orders_id = array();  //声明数组
    36   
    37   /**从第二行开始输出,因为excel表中第一行为列名*/ 
    38   for($currentRow = 2;$currentRow <= $allRow;$currentRow++){ 
    39   
    40       /**从第A列开始输出*/ 
    41     for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){ 
    42    //这部分注释不要,取出的数据不便于我们处理
    43    // $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/
    44    //  if($val!=''){
    45    //  $erp_orders_id[] = $val;
    46    //  }
    47    //数据坐标 
    48             $address = $currentColumn . $currentRow; 
    49             //读取到的数据,保存到数组$arr中 
    50             $data[$currentRow][$currentColumn] = $currentSheet->getCell($address)->getValue();
    51     /**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/ 
    52     //echo iconv('utf-8','gb2312', $val)."	"; 
    53     
    54   }  
    55   }
    56   return $data;
    57 }

    2.新建html用于文件上传student_excel.html,直接上form表单了,一定要加enctype="multipart/form-data"

     1 <form method="post" class="form-horizontal js-ajax-form" action="{:U('Student/student_excelpost')}" enctype="multipart/form-data">
     2             <fieldset>
     3                 <div class="control-group">
     4                     <label class="control-label">导入excel文件:</label>
     5                     <div class="controls">
     6                         <input type="file" name="file_stu">
     7                         <span class="form-required">*</span>
     8                     </div>
     9                 </div>
    10             </fieldset>
    11             <div class="form-actions">
    12                 <button type="submit" class="btn btn-primary js-ajax-submit">导入</button>
    13             </div>
    14 </form>

    3.上传过去php来判断表格,处理表格,返回结果

     1 //表格数据
     2     public function student_excelpost(){
     3         //获取上传的文件名、扩展名等信息
     4      if (! empty ( $_FILES ['file_stu'] ['name'] )) 
     5      {
     6         //保存的是文件上传到服务器临时文件夹之后的文件名
     7         $tmp_file = $_FILES ['file_stu'] ['tmp_name'];
     8         //分割文件名和扩展名
     9         $file_types = explode ( ".", $_FILES ['file_stu'] ['name'] );
    10         //获取扩展名
    11         $file_type = $file_types [count ( $file_types ) - 1];
    12 
    13      /*判别是不是.xls文件,判别是不是excel文件*/
    14      if (strtolower ( $file_type ) != "xlsx" && strtolower ( $file_type ) != "xls")              
    15      {
    16        $this->error ( '不是Excel文件,重新上传' );
    17      }
    18 
    19     /*设置上传路径*/
    20      $savePath = Excel_PATH.'Excel/';
    21 
    22     /*以时间来命名上传的文件*/
    23      $str = date ( 'Ymdhis' ); 
    24      $file_name = $str . "." . $file_type;
    25 
    26      /*是否上传成功*/
    27      if (! copy ( $tmp_file, $savePath . $file_name )) 
    28       {
    29         $this->error ( '上传失败' );
    30       }
    31     }
    32     $data = D("Think/Excel")->import( $savePath . $file_name );
    33     
    34     $res = array();  //声明数组
    35     
    36     // echo'<pre>';
    37     // var_dump($data);
    38     // exit;
    39     //查询user表,对应信息相互关联
    40     foreach($data as $i=>$val){
    41         // var_dump($val[B]);
    42         $s['class_name'] = $val[A];
    43         $s['student_name'] = $val[B];
    44         $s['student_number'] = $val[C];
    45         $s['student_tel'] = $val[D];
    46         if($val[E] == '男'){
    47             $s['student_sex'] = 1;
    48         }else{
    49             $s['student_sex'] = 0;
    50         }
    51         $s['student_birthday'] = $val[F];
    52         $s['student_national'] = $val[G];
    53         $s['student_native'] = $val[H];
    54         $s['student_email'] = $val[I];
    55         $s['student_from'] = $val[J];
    56         $s['student_alone'] = $val[K];
    57         $s['student_exp'] = $val[L];
    58         $s['student_think'] = $val[M];
    59         $s['student_love'] = $val[N];
    60         $s['student_tschool'] = $val[O];
    61         $s['student_tmajor'] = $val[P];
    62         $s['student_contact'] = $val[Q];
    63         $s['student_consider'] = $val[R];
    64         $s['student_affect'] = $val[S];
    65         $s['student_imp'] = $val[T];
    66         // echo'<pre>';
    67         // var_dump($s);$this->student_model(为数据库实例,本人在上面定义这里可以直接拿过来用)
    68         $rs = $this->student_model->add($s);
    69     }
    70         if($rs){
    71             $this->success("数据添加成功!", U('Student/student'));
    72         }else{
    73             $this->error("数据添加失败!"); 
    74         }
    75         // exit;
    76     }
    77 
    78 }

     以上便是phpexcel的运用实例,具体不难,实践一遍即可知晓,有什么不足的地方还请大家指教

     本人邮箱1428937236@qq.com,欢迎骚扰,上面的phpexcel懒得下载的可以来我的百度云,链接如下

    http://pan.baidu.com/s/1gfoRWsV

    作者:vajer

    -------------------------------------------

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    Android Studio 个性化设置
    显示出eclipse文件层次
    2014在百度之星资格赛的第四个冠军Labyrinth
    android在单身的对象和一些数据的问题被释放
    Windows Server 2008 网管数据采集 努力做“日拱一卒“
    【 D3.js 入门系列 --- 9.1 】 生产饼图
    Android监视返回键
    JavaScript总结一下--创建对象
    PS多形式的部分之间复制“笨办法”
    PHP图片等比缩放,并添加Logo水印特定代码和盯
  • 原文地址:https://www.cnblogs.com/scy152417/p/6473766.html
Copyright © 2020-2023  润新知