PHP將excel文件中的數據批量導入到數據庫中

這幾天在作項目時,遇到了須要批量導入數據的狀況,用戶將excel表格提交後,須要咱們後臺這邊將excel表格信息中的內容所有插入到數據表中。固然,前提是用戶給咱們的excel表格中的信息必須和咱們表中的字段信息時對應的才行,下面是我這邊後臺進行批量導入數據的實現步驟。php

首先咱們須要下載phpExcel數據庫

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

有須要這個類庫的童鞋能夠找我要,本人郵箱823410261@qq.com。函數

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

首先是須要獲得excel表格中的數據,其次是須要將這些數據作成符合SQL規範的格式,其中的細節處理將在下面的代碼中展現,最後是將獲取的數據連同SQL語句,一塊兒在程序中執行,將全部結果插入到數據表中。編碼


<?php
require_once '../Classes/PHPExcel.php';
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 'no Excel';
            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= 'A';$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] = '\''.$value[1].'\'';
    }
    foreach($row as $key=>$value){
        $row[$key] = implode(",",$value);
    }
    $row = implode("),(",$row);
    $row = '('.$row.')';
    $res = $cgsdiseasesinterface->insertDiseasesInformation($row);//該函數將數據插入到數據庫中
    if($res){
        echo json_encode(['code' => CODE_SUCCESS, 'result' => '批量導入成功']);
    }else{
        echo json_encode(['code' => CODE_ERROR, 'result' => '批量導入失敗']);
    }
}

這裏有一個點須要主要的是由於$currentRow是從2開始的,因此第一行應該是對應的字段的解釋,從第二行開始纔是咱們所須要的數據,你們能夠根據本身程序的實際須要進行更改。excel

這裏我是將因此的數據都作了字符串的拼接,好處是在數據庫是短鏈接時,能夠只須要鏈接一次數據庫,這樣節約了時間和系統資源,若是數據庫的設置是長鏈接,則用字符串拼接的優點不明顯。固然,你們其實也能夠用循環來實現將數據插入到表中,這種方式的優點是不須要對數據進行復雜的拼接處理,但壞處就是我剛纔說的,增長了運行的時間,並相對來講更消耗系統資源。code

相關文章
相關標籤/搜索