php 把excel文件批量导入到数据库代码

我们是利用了ExcelFileParser这个扩展来处理的哦,

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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>

<?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
/**
 * 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; $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;

//修改标记
        $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;
    }
}

?>

时间: 2024-10-28 07:59:02

php 把excel文件批量导入到数据库代码的相关文章

php 把excel批量导入到数据库代码

我们是利用了ExcelFileParser这个扩展来处理的哦, <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> &l

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

ExcelFileParser处理excel获得数据 可作批量导入到数据库 提交表单 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <

phpExcel导入excel文件数据到mysql数据库中老是出现页面访问错误是怎么回事

问题描述 phpExcel导入excel文件数据到mysql数据库中老是出现页面访问错误是怎么回事 在$sheet=$phpExcel->getSheet(0);如果不打印这个$sheet信息就会出现页面访问的错误信息 解决方案 要有一个sheet变量来获得getSheet(0)的sheet 解决方案二: $phpExcel->getSheet(0)那是取出第一张Sheet.如果不写,到底读写哪张Sheet? 解决方案三: http://www.jb51.net/article/59844.h

excel-使用jxl把Excel的数据导入到数据库中的问题

问题描述 使用jxl把Excel的数据导入到数据库中的问题 如果有Excel中值为空的话,导入到数据库中报错.怎么改? 数据库中的该列是允许为空的. 解决方案 JXL导入EXCEL文件到数据库 1.导入到数据库中 第一步:把文件上传到服务器.private File upload; 第二步:解析文件.(只支持EXCEL2003文件) 第三部:保存到数据库中 [java] view plaincopy // 开始解析 List importUserList = new ArrayList(); t

cvs 数据库 主键外键-CVS格式文件数据导入新数据库后自动生成主键外键

问题描述 CVS格式文件数据导入新数据库后自动生成主键外键 以前将数据库中的数据导出来了,后来手贱把给数据库毁了. 现在希望通过以前导出来的CVS文件数据恢复以前的数据库,最好是自动的,主键外键自动关联自动生成[里边表实在太多了]. 什么数据库都行,什么MySQL.SQLServer都可以,只求能重建以前的数据库啊! 不知道各位大神有没有可行的办法啊? 解决方案 没办法,只有数据.需要添加SQL语句

文本数据批量导入导出数据库功能~~急~~

问题描述 在asp.net中怎么实现txt和Iso文件批量导入跟导出,导入的数据内容作成报表打印哪个能这好给我个例子 解决方案 解决方案二:关键在于你自定义的文件格式

求完整的JSP页面上传excel 将数据导入SQL数据库的代码

问题描述 求完整的JSP页面上传excel 将数据导入SQL数据库的代码 已下载好jxl包,不知道怎么和jsp一起使用,哪位大神帮忙给下完整代码,谢谢啦. 解决方案 demo 解决方案二: http://download.csdn.net/detail/bj20140820/8339055 里面有完整代码及其解释 解决方案三: 参考这个 http://ask.csdn.net/questions/164454

qt excel mysql-qt编程中excel文件如何导入mysql中

问题描述 qt编程中excel文件如何导入mysql中 求助 如何实现qt编程的excel文件导入mysql 具体点 万分感谢

matlab对excel文件的导入和处理办法

问题描述 matlab对excel文件的导入和处理办法 怎么使用matlab对一个文件下的多个文件夹中的excel文件进行导入和各种操作? 解决方案 http://wenku.baidu.com/link?url=X7iz4QDrDLWjm5Tr1rTfJh5GLSAD18-QNx2eWgHHYitcrzE1nJ_mM9buYdU8aoBVT5-0-ws8S1lRAE_DvvMhSiBOeTdBsG-5HEfCB7MxKa7 解决方案二: Matlab读写excel文件matlab:Excel文