ホームページ  >  記事  >  バックエンド開発  >  PHP は Excel ファイルからデータベースにデータをバッチインポートします

PHP は Excel ファイルからデータベースにデータをバッチインポートします

高洛峰
高洛峰オリジナル
2016-11-22 16:46:481597ブラウズ

最近プロジェクトに取り組んでいるときに、ユーザーが Excel フォームを送信した後、バックエンドで Excel フォーム情報のすべての内容をデータ テーブルに挿入する必要があるという状況に遭遇しました。もちろん、ユーザーが提供する Excel テーブルの情報がテーブルのフィールド情報に対応している必要があることが前提となります。バックエンドにデータをバッチインポートする手順は次のとおりです。

まずphpExcelをダウンロードする必要があります

phpExcelは、Office Excelドキュメントを操作するために使用されるPHPクラスライブラリであり、Microsoftの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 から始まるため、最初の行は対応するフィールドの説明である必要があり、2 行目からは必要なデータであるということです。独自のプログラムに従うことができます。実際に変更を加える必要があります。

ここでは、すべてのデータを文字列に結合しました。利点は、データベースが短い接続の場合、データベースに 1 回接続するだけで済み、データベースが長い接続に設定されている場合に時間とシステム リソースを節約できることです。文字列連結を使用する利点は明らかではありません。もちろん、実際にループを使用してテーブルにデータを挿入することもできます。この方法の利点は、データの複雑な結合が必要ないことですが、欠点は、先ほど述べたように、実行時間が長くなり、コストが削減されることです。より多くのシステムリソースを消費します。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。