Während ich heutzutage an Projekten arbeitete, stieß ich auf eine Situation, in der Daten stapelweise importiert werden mussten. Nachdem der Benutzer das Excel-Formular übermittelt hatte, musste unser Backend den gesamten Inhalt der Excel-Formularinformationen in die Datentabelle einfügen. Voraussetzung ist natürlich, dass die Informationen in der Excel-Tabelle, die der Benutzer uns gibt, mit den Feldinformationen in unserer Tabelle übereinstimmen müssen. Im Folgenden sind die Schritte zum Stapelimportieren von Daten in meinem Backend aufgeführt.
Zuerst müssen wir phpExcel herunterladen
phpExcel ist eine PHP-Klassenbibliothek, die zum Betrieb von Office-Excel-Dokumenten verwendet wird. Sie basiert auf dem OpenXML-Standard und der PHP-Sprache von Microsoft. Sie können damit Tabellenkalkulationen in verschiedenen Formaten lesen und schreiben.
Wenn Sie diese Klassenbibliothek benötigen, kontaktieren Sie mich bitte unter 823410261@qq.com.
Nach dem Herunterladen von phpExcel folgt zunächst der Teil zur Codierungsimplementierung. Lassen Sie mich zunächst über die Gesamtidee meiner Handhabung sprechen.
Zunächst müssen wir die Daten in ein Format bringen, das den SQL-Spezifikationen entspricht. Die detaillierte Verarbeitung wird im folgenden Code gezeigt Die erhaltenen Daten müssen mit SQL-Anweisungen kombiniert werden, die gemeinsam im Programm ausgeführt werden und alle Ergebnisse in die Datentabelle eingefügt werden.
<?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' => '批量导入失败']); } }
Ein wichtiger Punkt hier ist, dass $currentRow bei 2 beginnt, daher sollte die erste Zeile die Erklärung des entsprechenden Feldes sein, und ab der zweiten Zeile müssen wir das ändern die erforderlichen Daten entsprechend den tatsächlichen Anforderungen Ihres Programms.
Hier habe ich alle Daten in Zeichenfolgen gespleißt. Der Vorteil besteht darin, dass Sie bei einer kurzen Verbindung nur einmal eine Verbindung zur Datenbank herstellen müssen, was Zeit und Systemressourcen spart Bei langen Verbindungen ist der Vorteil der Verwendung von String-Spleißen nicht offensichtlich. Natürlich können Sie auch Schleifen verwenden, um Daten in die Tabelle einzufügen. Der Vorteil dieser Methode besteht darin, dass kein komplexes Zusammenfügen von Daten erforderlich ist. Der Nachteil besteht jedoch darin, dass sie, wie ich gerade sagte, die Laufzeit erhöht und die Kosten senkt . Es verbraucht mehr Systemressourcen.