php 把excel檔大量匯入到資料庫代碼

來源:互聯網
上載者:User
關鍵字 網路程式設計 PHP教程

我們是利用了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-&gt;display();


}


    /**


     * 提交處理


     */


    public function parse()


    {


       /**


        * $_FILES陣列說明


        * array(n) {


        *   ["表單檔案框名稱"] =&gt; array(5) {


        *       ["name"]        =&gt; 提交檔案名稱


        *       ["type"]        =&gt; 提交檔案類型 Excel為"application/vnd.ms-excel"


*       ["tmp_name"]    =&gt; 暫存檔案名稱


        *       ["error"]       =&gt; 錯誤(0成功1檔太大超過upload_max_filesize2檔太大超過MAX_FILE3上傳不完整4沒有上傳檔)


        *       ["size"]        =&gt; 檔案大小(單位: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-&gt;main();


        }


        //輸出處理


        print_r($return);


    }


}


?&gt;




&lt;?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 &lt;string&gt; $filename 上傳檔暫存檔案名稱


     */


    public function __construct($filename)


    {


        /**


         * 引入excelparser類


         * 普通方法為


         * requires 路徑.'excelparser.php';


         * import為ThinkPHP自帶導入類方法


         */


import('@. Util.PHPExcelParser.excelparser','','.php');


        $this-&gt;_excel_handle=new ExcelFileParser();


        //錯誤獲取


        $this-&gt;checkErrors($filename);


    }


    /**


     * 錯誤校驗


     */


    private function checkErrors($filename)


    {


        /**


         * 方法一


         */


        $error_code=$this-&gt;_excel_handle-&gt;ParseFromFile($filename);


/**


         * 方法二


         * $file_handle = fopen($this-&gt;_filename,'rb');


         * $content = fread($file_handle,filesize($this-&gt;_filename));


         * fclose($file_handle);


         * $error_code = $this-&gt;_excel-&gt;ParseFromString($content);


         * unset($content,$file_handle);


         */


        switch($error_code)


        {


            case 0:


無錯誤不處理


                break;


            case 1:


                $this-&gt;_data=array(1,'檔讀取錯誤(Linux注意讀寫許可權)');


                break;


            case 2:


                $this-&gt;_data=array(1,'檔太小');


                break;


case 3:


                $this-&gt;_data=array(1,'讀取Excel表頭失敗');


                break;


            case 4:


                $this-&gt;_data=array(1,'檔讀取錯誤');


                break;


            case 5:


                $this-&gt;_data=array(1,'檔可能為空');


break;


            case 6:


                $this-&gt;_data=array(1,'檔不完整');


                break;


            case 7:


                $this-&gt;_data=array(1,'讀取資料錯誤');


                break;


            case 8:


$this-&gt;_data=array(1,'版本錯誤');


                break;


        }


        unset($error_code);


    }


    /**


     * Excel資訊獲取


     */


    private function getExcelInfo()


    {


        if(1==$this-&gt;_data[0])return;


        /**


         * 獲得sheet數量


         * 獲得sheet單元對應的行和列


*/


        $this-&gt;_excel['sheet_number']=count($this-&gt;_excel_handle-&gt;worksheet['name']);


        for($i=0;$i&lt;$this-&gt;_excel['sheet_number'];$i++)


        {


            /**


             * 行于列


             * 注意:從0開始計數


             */


            $row=$this-&gt;_excel_handle-&gt;worksheet['data'][$i]['max_row'];


$col=$this-&gt;_excel_handle-&gt;worksheet['data'][$i]['max_col'];


            $this-&gt;_excel['row_number'][$i]=($row==Null)?0:++$row;


            $this-&gt;_excel['col_number'][$i]=($col==Null)?0:++$col;


            unset($row,$col);


        }


    }


    /**


     * 中文處理函數


     * @return &lt;string&gt;


     */


    private function uc2html($str)


    {


        $ret = '';


for( $i=0; $i&lt;strlen($str)/2; $i++ )


        {


            $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);


            $ret .= '&amp;#'.$charcode.';';


        }


        return mb_convert_encoding($ret,'UTF-8','HTML-ENTITIES');


    }


    /**


     * Excel資料獲取


     */


    private function getExcelData()


    {


        if(1==$this-&gt;_data[0])return;

        //修改標記


        $this-&gt;_data[0]=1;


        //獲取資料


        for($i=0;$i&lt;$this-&gt;_excel['sheet_number'];$i++)


        {


            /**


             * 對行迴圈


             */


            for($j=0;$j&lt;$this-&gt;_excel['row_number'][$i];$j++)


            {


                /**


* 對列迴圈


                 */


                for($k=0;$k&lt;$this-&gt;_excel['col_number'][$i];$k++)


                {


                    /**


                     * array(4) {


                     *   ["type"]   =&gt; 類型 [0字元類型1整數2浮點數3日期]


*   ["font"]   =&gt; 字體


                     *   ["data"]   =&gt; 資料


                     *   ...


                     * }


                     */


                    $data=$this-&gt;_excel_handle-&gt;worksheet['data'][$i]['cell'][$j][$k];


switch($data['type'])


                    {


                        case 0:


                            //字元類型


                            if($this-&gt;_excel_handle-&gt;sst['unicode'][$data['data']])


{


                                //中文處理


                                $data['data'] = $this-&gt;uc2html($this-&gt;_excel_handle-&gt;sst['data'][$data['dat a']]);


                            }


else


                            {


                                $data['data'] = $this-&gt;_excel_handle-&gt;sst['data'][$data['data']];


                            }


                            break;


                        case 1:


                            //整數


                            //TODO


                            break;


                        case 2:


浮點數


                            //TODO


                            break;


                        case 3:


                            //日期


TODO


                            break;


                    }


                    $this-&gt;_data[1][$i][$j][$k]=$data['data'];


                    unset($data);


                }


}


        }


    }


    /**


     * 主函數


     * @return &lt;array&gt; array(識別碼,內容s)


     */


    public function main()


    {


        //Excel資訊獲取


        $this-&gt;getExcelInfo();


        //Excel資料獲取


        $this-&gt;getExcelData();


        return $this-&gt;_data;


    }


}

?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.