利用PHPexcel将excel表导入mysql数据库

来源:互联网 发布:ppt圆环图编辑数据 编辑:程序博客网 时间:2024/05/17 02:16

将PHPexcel放入thinkphp框架下Extend/Vendor/PHPExcel文件夹中


<?php

class ExcelAction extends Action{
        public function index()
{
 $this->display('Excel/index');
}
       
public function add()
{
    if (! empty ( $_FILES ['Myfile'] ['name'] )) {
              $tmp_file = $_FILES ['Myfile'] ['tmp_name'];
              $file_types = explode ( ".", $_FILES ['Myfile'] ['name'] );
              $file_type = $file_types [count ( $file_types ) - 1];
               /*判别是不是.xls文件,判别是不是excel文件*/
               if (strtolower ( $file_type ) != "xls")       
              {
                 $this->error ( '不是Excel文件,重新上传' );
               }
              /*设置上传路径*/
               $savePath = './Public/Excel/';
              /*以时间来命名上传的文件*/
               $str = date ( 'Ymdhis' ); 
               $file_name = $str . "." . $file_type;
               /*是否上传成功*/
               if (! copy ( $tmp_file, ($savePath . $file_name) )) 
               {
                   echo $tmp_file, ($savePath .$file_name);
                 $this->error ( '上传失败' );
               }
              /*
                *对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中


               注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入
               */
               import('@.lib.ExcelToArray');//导入excelToArray类                              //在Lib下面新建一个文件夹lib,将excelToArray类放在里面
               $ExcelToArray=new ExcelToArray();//实例化                                       
               $res=$ExcelToArray->read($savePath . $file_name,"UTF-8",$file_type);//传参,判断office2007还是office2003 
//               $res=$ExcelToArray->read(C('UPLOAD_DIR'). $file_name,"UTF-8",$file_type);
               
              /*
                重要代码 解决Thinkphp M、D方法不能调用的问题  
                如果在thinkphp中遇到M 、D方法失效时就加入下面一句代码
              */
              //spl_autoload_register ( array ('Think', 'autoload' ) );
              /*对生成的数组进行数据库的写入*/
              foreach ( $res as $k => $v ) 
              {
                  $k=$k-1;//addAll方法要求数组必须有0索引
                  $data[$k]['id'] = $v [0];
                  $data[$k]['year'] = $v [1];/
                  $data[$k]['studentid'] = $v [3];
                  $data[$k]['name'] = $v [4];
                  $data[$k]['province'] = $v [6];
                  $data[$k]['major'] = $v [7];
                  $data[$k]['area'] = $v [8];
                  $data[$k]['class'] = $v [14];
                  $data[$k]['idcard'] = $v [15];
              }
//              var_dump($data);
//                   $artwebstudent=M('artwebstudent');//M方法 
                   $result=M('artwebstudent')->addAll($data,array(),true);   //查找Thinkphp源码翻到Library/Think/Model.class.php找到了addAll方法:public      
                 if (! $result)                                                                                  //function addAll($dataList,$options=array(),$replace=false)于是秒懂了,replace 
                 { 
                     $this->error ( '导入数据库失败' );                                     //肯定是问你是否覆盖已经存在的数据,于是修改我的addAll方法为:
                     exit();                                                                                         // $user- >addAll($data,array(),true):再次测试问题解决。
                 }else {
                     $this->success( '导入数据库成功' );
                 }
               
            }
        }

}



在实现导入功能的时候我遇到了很多问题,首先PHPexcel和excelToArray类的放置位置及引用路径一定要正确。然后导入excel的格式要是excel2003或excel2007的,可以用另存为转换格式,还存在一些问题是不能导入大量的数据,还需要慢慢琢磨,就这个东西就弄了这么久,写点东西来纪念一下。

0 0
原创粉丝点击