澳门新葡萄京官网注册php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)

以前自己也写过一个简单的excel进行数据导入到mysql数据库,这款是一个网友发布的,觉得不错。

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

复制代码 代码如下:

?php/*** CopyRight (c) 2009,* All rights reserved.*
文件名:excel数据获取* 摘 要:** @author 星期八
[email=ixqbar@hotmail.com]ixqbar@hotmail.com[/email]* @version
0.1*/class ExcelParser{ private $_data=array(0,”); private
$_excel_handle; private $_excel=array(); /** * 构造函数 * @param
string $filename 上传文件临时文件名称 */ public function
__construct($filename) { /** * 引入excelparser类 * 普通方法为 *
requires 路径.’excelparser.php’; * import为ThinkPHP自带导入类方法 */
import(‘@.Util.PHPExcelParser.excelparser’,”,’.php’);
$this-_excel_handle=new ExcelFileParser(); //错误获取
$this-checkErrors($filename); } /** * 错误校验 */ private function
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) { case 0:
//无错误不处理 break; case 1:
$this-_data=array(1,’文件读取错误(Linux注意读写权限)’); break; case 2:
$this-_data=array(1,’文件太小’); break; case 3:
$this-_data=array(1,’读取Excel表头失败’); break; case 4:
$this-_data=array(1,’文件读取错误’); break; case 5:
$this-_data=array(1,’文件可能为空’); break; case 6:
$this-_data=array(1,’文件不完整’); break; case 7:
$this-_data=array(1,’读取数据错误’); break; case 8:
$this-_data=array(1,’版本错误’); break; } unset($error_code); } /**
* Excel信息获取 */ private function getExcelInfo() {
if(1==$this-_data[0])return; /** * 获得sheet数量 *
获得sheet单元对应的行和列 */
$this-_excel[‘sheet_number’]=count($this-_excel_handle-worksheet[‘name’]);
for($i=0;$i$this-_excel[‘sheet_number’];$i++) { /** * 行于列 *
注意:从0开始计数 */
$row=$this-_excel_handle-worksheet[‘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 string */
private function uc2html($str) { $ret = ”; for( $i=0; $istrlen($str)/2;
$i++ ) { $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]); $ret
.= ‘#’.$charcode; } return
mb_convert_encoding($ret,’UTF-8′,’HTML-ENTITIES’); } /** *
Excel数据获取 */ private function getExcelData() {
if(1==$this-_data[0])return;

提交表单

Excel数据获取演示

//修改标记 $this-_data[0]=1; //获取数据
for($i=0;$i$this-_excel[‘sheet_number’];$i++) { /** * 对行循环
*/ for($j=0;$j$this-_excel[‘row_number’][$i];$j++) { /** *
对列循环 */ for($k=0;$k$this-_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
array(标识符,内容s) */ public function main() { //Excel信息获取
$this-getExcelInfo(); //Excel数据获取 $this-getExcelData(); return
$this-_data; }}

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
“”>
<html xmlns=””>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″
/>
<title>Excel数据获取演示</title>
<meta name=”Keywords” content=”TODO” />
<meta name=”Description” content=”TODO”/>
</head>
<body>
    <div>
      <div>Excel数据获取演示</div>
      <div>
        <form method=”POST” action=”/Index/parse”
enctype=”multipart/form-data”>
            <input type=”file” name=”excel” value=”” />
            <input type=”submit” name=”submit” value=”提交” />
        </form>
      </div>
    </div>
</body>
</html>

Excel数据获取演示<>

?

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

<>
<>

!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN xmlns=
content=text/html; charset=utf-8 /titleExcel数据获取演示/titlemeta
name=Keywords content=TODO /meta name=Description content=TODO//headbody
div divExcel数据获取演示/div div form method=POST action=/Index/parse
enctype=multipart/form-data input type=file name=excel value= / input
type=submit name=submit value=提交 / /form /div
/div/body/html?php/*** CopyRight (c) 2009,* All rights reserved.*
文件名:* 摘 要:** @author 星期八
[email=ixqbar@hotmail.com]ixqbar@hotmail.com[/email]* @version*/

class IndexAction extends Action
{
    /**
     * 构造函数
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * 默认索引页
     */
    public function index()
    {
        $this->display();
    }
    /**
     * 提交处理
     */
    public function 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]

复制代码 代码如下:

class IndexAction extends Action{ /** * 构造函数 */ public function
__construct() { parent::__construct(); } /** * 默认索引页 */
public function index() { $this-display(); } /** * 提交处理 */
public function 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 <string> $filename 上传文件临时文件名称
     */
    public function __construct($filename)
    {
        /**
         * 引入excelparser类
         * 普通方法为
         * requires 路径.’excelparser.php’;
         * import为ThinkPHP自带导入类方法
         */
       
import(‘@.Util.PHPExcelParser.excelparser’,”,’.php’);
        $this->_excel_handle=new ExcelFileParser();
        //错误获取
        $this->checkErrors($filename);
    }
    /**
     * 错误校验
     */
    private function 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)
        {
            case 0:
                //无错误不处理
                break;
            case 1:
               
$this->_data=array(1,’文件读取错误(Linux注意读写权限)’);
                break;
            case 2:
                $this->_data=array(1,’文件太小’);
                break;
            case 3:
                $this->_data=array(1,’读取Excel表头失败’);
                break;
            case 4:
                $this->_data=array(1,’文件读取错误’);
                break;
            case 5:
                $this->_data=array(1,’文件可能为空’);
                break;
            case 6:
                $this->_data=array(1,’文件不完整’);
                break;
            case 7:
                $this->_data=array(1,’读取数据错误’);
                break;
            case 8:
                $this->_data=array(1,’版本错误’);
                break;
        }
        unset($error_code);
    }
    /**
     * Excel信息获取
     */
    private function getExcelInfo()
    {
        if(1==$this->_data[0])return;
        /**
         * 获得sheet数量
         * 获得sheet单元对应的行和列
         */
       
$this->_excel[‘sheet_number’]=count($this->_excel_handle->worksheet[‘name’]);
        for($i=0;$i<$this->_excel[‘sheet_number’];$i++)
        {
            /**
             * 行于列
             * 注意:从0开始计数
             */
           
$row=$this->_excel_handle->worksheet[‘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 <string>
     */
    private function uc2html($str)
    {
        $ret = ”;
        for( $i=0; $i<strlen($str)/2; $i++ )
        {
            $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
            $ret .= ‘&#’.$charcode.’;’;
        }
        return mb_convert_encoding($ret,’UTF-8′,’HTML-ENTITIES’);
    }
    /**
     * Excel数据获取
     */
    private function getExcelData()
    {
        if(1==$this->_data[0])return;

/**
* CopyRight (c) 2009,
* All rights reserved.
* 文件名:
* 摘 要:
*
* @author 星期八
[url=mailto:ixqbar@hotmail.com]ixqbar@hotmail.com[/url]
* @version
*/

        //修改标记
        $this->_data[0]=1;
        //获取数据
        for($i=0;$i<$this->_excel[‘sheet_number’];$i++)
        {
            /**
             * 对行循环
             */
           
for($j=0;$j<$this->_excel[‘row_number’][$i];$j++)
            {
                /**
                 * 对列循环
                 */
               
for($k=0;$k<$this->_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> array(标识符,内容s)
     */
    public function main()
    {
        //Excel信息获取
        $this->getExcelInfo();
        //Excel数据获取
        $this->getExcelData();
        return $this->_data;
    }
}

public function 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);
?>

?>

复制代码 代码如下:

/**
* CopyRight (c) 2009,
* All rights reserved.
* 文件名:excel数据获取
* 摘 要:
*
* @author 星期八
[url=mailto:ixqbar@hotmail.com]ixqbar@hotmail.com[/url]
* @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(‘@.Util.PHPExcelParser.excelparser’,”,’.php’);
$this->_excel_handle=new ExcelFileParser();
//错误获取
$this->checkErrors($filename);
}
/**
* 错误校验
*/
private function 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)
{
case 0:
//无错误不处理
break;
case 1:
$this->_data=array(1,’文件读取错误(Linux注意读写权限)’);
break;
case 2:
$this->_data=array(1,’文件太小’);
break;
case 3:
$this->_data=array(1,’读取Excel表头失败’);
break;
case 4:
$this->_data=array(1,’文件读取错误’);
break;
case 5:
$this->_data=array(1,’文件可能为空’);
break;
case 6:
$this->_data=array(1,’文件不完整’);
break;
case 7:
$this->_data=array(1,’读取数据错误’);
break;
case 8:
$this->_data=array(1,’版本错误’);
break;
}
unset($error_code);
}
/**
* Excel信息获取
*/
private function 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->worksheet[‘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
*/
private function 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数据获取
*/
private function 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;
}
}
?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注