首頁  >  文章  >  後端開發  >  PHP將excel檔案中的資料批次匯入資料庫中

PHP將excel檔案中的資料批次匯入資料庫中

高洛峰
高洛峰原創
2016-11-22 16:46:481599瀏覽

這幾天在做專案時,遇到了需要批次匯入資料的情況,使用者將excel表格提交後,需要我們後台這邊將excel表格資訊中的內容全部插入到資料表中。當然,前提是使用者給我們的excel表格中的資訊必須和我們表格中的欄位資訊時對應的才行,以下是我這邊後台進行批次匯入資料的實現步驟。

首先我們需要下載phpExcel

phpExcel是用來操作Office Excel 文件的一個PHP類別庫,它是基於微軟的OpenXML標準和PHP語言。可以用它來讀取、寫入不同格式的電子表格.

有需要這個類庫的童鞋可以找我要,本人郵箱823410261@qq.com。

下載好phpExcel後,以下就是編碼實現部分了,首先說下本人處理的整體思路。

首先是需要得到excel表格中的數據,其次是需要將這些數據做成符合SQL規範的格式,其中的細節處理將在下面的程式碼中展示,最後是將獲取的數據連同SQL語句,一起在程式中執行,將所有結果插入資料表中。

<?php
require_once &#39;../Classes/PHPExcel.php&#39;;
function getFileExcle($value){
    $cgsdiseasesinterface = new Cgs_diseases_interface();

    $filePath = $value;//$value为需要导入数据的excel文件

    $PHPExcel = new PHPExcel();

    /**默认用excel2007读取excel,若格式不对,则用之前的版本进行读取*/
    $PHPReader = new PHPExcel_Reader_Excel2007();

    if(!$PHPReader->canRead($filePath)){
        $PHPReader = new PHPExcel_Reader_Excel5();
        if(!$PHPReader->canRead($filePath)){
            echo &#39;no Excel&#39;;
            return ;
        }
    }

    $PHPExcel = $PHPReader->load($filePath);

    /**读取excel文件中的第一个工作表*/
    $currentSheet = $PHPExcel->getSheet(0);
    /**取得最大的列号*/
    $allColumn = $currentSheet->getHighestColumn();
    /**取得一共有多少行*/
    $allRow = $currentSheet->getHighestRow();
    $row = array();
    /**从第二行开始输出,因为excel表中第一行为列名*/
    for($currentRow = 2;$currentRow <= $allRow;$currentRow++){
        /**从第A列开始输出*/
        $col = array();
        for($currentColumn= &#39;A&#39;;$currentColumn<= $allColumn; $currentColumn++){
            $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/
            array_push($col,$val);
        }
        array_push($row,$col);
    }
    foreach($row as $key=>$value){
        $row[$key][1] = &#39;\&#39;&#39;.$value[1].&#39;\&#39;&#39;;
    }
    foreach($row as $key=>$value){
        $row[$key] = implode(",",$value);
    }
    $row = implode("),(",$row);
    $row = &#39;(&#39;.$row.&#39;)&#39;;
    $res = $cgsdiseasesinterface->insertDiseasesInformation($row);//该函数将数据插入到数据库中
    if($res){
        echo json_encode([&#39;code&#39; => CODE_SUCCESS, &#39;result&#39; => &#39;批量导入成功&#39;]);
    }else{
        echo json_encode([&#39;code&#39; => CODE_ERROR, &#39;result&#39; => &#39;批量导入失败&#39;]);
    }
}

這裡有一個點需要主要的是因為$currentRow是從2開始的,所以第一行應該是對應的字段的解釋,從第二行開始才是我們所需要的數據,大家可以根據自己程序的實際需要進行更改。

這裡我是將所以的資料都做了字串的拼接,好處是在資料庫是短連接時,可以只需要連接一次資料庫,這樣節約了時間和系統資源,如果資料庫的設定是長連接,則用字串拼接的優勢不明顯。當然,大家其實也可以用循環來實現將資料插入表中,這種方式的優勢是不需要對資料進行複雜的拼接處理,但壞處就是我剛才說的,增加了運行的時間,並相對來說更消耗系統資源。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn