首页 >php教程 >php手册 >ExcelFileParser处理excel获得数据 可作批量导入到数据库

ExcelFileParser处理excel获得数据 可作批量导入到数据库

WBOY
WBOY原创
2016-06-13 11:23:121152浏览

ExcelFileParser处理excel获得数据 可作批量导入到数据库

提交表单





Excel数据获取演示




   


     
Excel数据获取演示

     

       

           
           
       

     

   



提交处理
[php]
/**
* CopyRight (c) 2009,
* All rights reserved.
* 文件名:
* 摘  要:
*
* @author 星期八 ixqbar@hotmail.com
* @version
*/

class IndexAction 扩展 Action
{
    /**
     * 构造函数
    */
    public function __construct()
    {
       parent::__construct();
    }
    /**
     * 默认索引页
    */
    公共函数索引()
    {
        $this->display();
    }
    /**
     * 提交处理
    */
    公共函数 parse()
    {
       /**
        * $_FILES数组说明
        * array(n) {
        *   ["表单文件框名称"] => array(5) {
        *       ["name"]        => 提交文件名称
        *       ["type"]        => 提交文件类型 Excel为"application/vnd.ms-excel"
        *       ["tmp_name"]    => 临时文件名称
        *       ["error"]       => 错误(0成功1文件太大超过upload_max_filesize2文件太大超过MAX_FILE3上传不完整4没有上传文件)
        *       ["size"]        => 文件大小(单位:KB)
        *   }
        * }
       */
        $return=array(0,'');
        /**
         * 判断是否提交
         * is_uploaded_file(文件名称)用于确定指定的文件是否使用POST方法上传,防止非法提交,通常和move_upload_file一起使用保存上传文件到指定的路径
        * /
        if(!isset($_FILES) || !is_uploaded_file($_FILES['excel']['tmp_name']))
        {
            $return=array(1,'提交不' );
        }
        //处理
        if(0 == $return[0])
        {
            import('@.Util.ExcelParser');
           excel $ = new ExcelParser($_FILES['excel']['tmp_name']);
            $return=$excel->main();
        }
        // 输出处理
        print_r($return );
    }
}
?>
[/php]

处理类
[php]
/**
* CopyRight (c) 2009,
* All rights reserved.
* 文件名:excel数据获取
* 摘  要:
*
* @author 星期八 ixqbar@hotmail.com
* @version 0.1
*/
class ExcelParser
{
    private $_data=array(0,' ');
    private $_excel_handle;
    private $_excel=array();
    /**
     * 构造函数
     * @param $filename 上传文件临时文件名称
    */
    public function __construct($filename)
    {
        / **
         * 引入excelparser类
         * 普通方法为
         * requires 路径.'excelparser.php';
         * import为ThinkPHP自带导入类方法
        */
        import('@.Util.PHPExcelParser.excelparser','','.php');
        $this->_excel_handle=new ExcelFileParser();
        / /错误获取
        $this->checkErrors($filename);
    }
    /**
     * 错误校验
    */
    私有函数 checkErrors($filename)
    {
        / **
         * 方法一
        */
        $error_code=$this->_excel_handle->ParseFromFile($filename);
        /**
         * 方法二
         * $file_handle = fopen($this->_filename,'rb');
         * $content = fread($file_handle,filesize($this->_filename));
         * fclose($file_handle);
         * $error_code = $this->_excel->ParseFromString($content);
         * unset($content,$file_handle);
        */
        switch($error_code)
{
            案例 0:
                // 无错误不处理
                中断;
            案例 1:
                $this->_data=array (1、'文件读取错误(Linux注意读写权限)');
                中断;
            情况 2:
               $this->_data=array(1,'文件太小');
                中断;
            案例 3:
$ this-> _data = array(1,'读取excel表头失败');
break;
案例4: $ this-> _data = array(1,'文件读取错误');
               break;
            case 5:
                $this->_data=array(1,'文件可能为空');
               break;
            案例 6:
                $this->_data=array(1,'文件不完整');
                break;
            case 7:
                $this->_data=array(1,'读取数据错误') ;
                中断;
            情况 8:
               $this->_data=array(1,'版本错误');
                中断;
       }
        未设置($error_code);
    }
    /**
     * Excel信息获取
    */
    私有函数 getExcelInfo()
    {
        if(1==$this->_data[0])return;
/**
         * 获得sheet数量
         * 获得sheet单元对应的行和列
        */
        $this->_excel['sheet_number']=count($this->_excel_handle->worksheet['name']);
        for($i= 0;$i_excel['sheet_number'];$i )
        {
            /**
             * 行于列
             * 注意:从0开始计数
            */
            $row=$this->_excel_handle->工作表['data'][$i]['max_row'];
            $col=$this->_excel_handle->worksheet['data'][$i]['max_col'];
$this->_excel['row_number'][$i]=($row==NULL)?0: $row;
            $this->_excel['col_number'][$i]=($ col==NULL)?0: $col;
            unset($row,$col);
        }
    }
    /**
     * 中文处理函数
     * @return
    */
    私有函数 uc2html($ str)
    {
        $ret = '';
        for( $i=0; $i        {
            $charcode = ord($str[$i*2]) 256*ord($str[$i*2 1]);
            $ret .= '' .$charcode.';';
        }
        return mb_convert_encoding($ret,'UTF-8','HTML-ENTITIES');
    }
    /**
     * Excel数据获取
    */
    私有函数 getExcelData()
    {
        if(1==$this->_data[0])return;

        // 修改标记
        $this->_data[0]=1;
        //获取数据
        for($i=0;$i_excel[' sheet_number'];$i )
        {
            /**
             * 对行循环
            */
            for($j=0;$j_excel['row_number'][$i] ;$j )
            {
                /**
                 * 对列循环
                */
                for($k=0;$k_excel['col_number'][$i];$k )
                {
                    /**
                     * array(4) {
                     *   ["type"]   => 类型 [0字符类型1整数2浮点数3日期]
                     *   ["font"]   => 字体
                     *   ["data"]   => 数据
                     *   ...
                     * }
                    */
                   $data=$this->_excel_handle->worksheet['data'][$i]['cell'][$j] [$k];
                   switch($data['type'])
                   {
                        case 0:
                            // 字符类型
                            if($this->_excel_handle->sst ['unicode'][$data['data']])
                            {
                              // 中文处理
                               $data['data'] = $this->uc2html($this->_excel_handle ->sst['data'][$data['data']]);
                           }
                           else
                            {
                                $data['data'] = $this->_excel_handle->sst['data'][$data['data']];
                            }
                            break;
                        case 1:
                            //整数
                            //TODO
                            break;
                        case 2:
                            //浮点数
                            //TODO
                            break;
                        case 3:
                            //日期
                            //TODO
                            break;
                    }
                    $this->_data[1][$i][$j][$k]=$data['data'];
                    unset($data);
                }
            }
        }
    }
    /**
     * 主函数
     * @return array(标识符,内容s)
    */
    public function main()
    {
        //Excel信息获取
        $this->getExcelInfo();
        //Excel数据获取
        $this->getExcelData();
        return $this->_data;
    }
}

?>


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn