Ich habe einen einfachen Excel-Import mit PHPExcel (Enzyklopädie: eine PHP-Klassenbibliothek zum Bearbeiten von Office-Excel-Dokumenten, basierend auf dem OpenXML-Standard und der PHP-Sprache von Microsoft) durchgeführt.
Okay, nicht mehr, fangen wir an. ..
Zuerst müssen Sie über die PHPExcel-Klassenbibliothek verfügen, klicken Sie hier, um https://github.com/Zmwherein/PHPExcel.git herunterzuladen
und fügen Sie sie dann in ThinkPHPLibraryVendor ein (persönliche Präferenz, (sofern es importiert werden kann)
Wie im Bild gezeigt:
PHPExcel.php ähnelt einer Eingabedatei. Sie können hineingehen und sehen, wie die Methode geschrieben wird Es wird ausgeführt...
Dies ist die Schnittstelle:
Beurteilen wir zunächst, ob Dateien hochgeladen wurden (tatsächlich sollte dies der Fall sein). optimiert und besser geschrieben werden, aber meine persönlichen Fähigkeiten sind vorerst begrenzt) )
1 public function import() 2 { 3 // p($data_in_db); 4 if ( ! empty($_FILES)) 5 { 6 $upload = new \Think\Upload(); 7 $upload -> maxSize = 3145728 ; 8 $upload -> exts = array('xlsx', 'xls'); 9 $upload -> rootPath = './'; // 设置附件上传根目录 10 $upload -> savePath = '/Upload/excel/'; // 设置附件上传(子)目录 11 $upload -> subName = false; 12 $upload -> saveName = 'time'; 13 14 $info = $upload -> uploadOne($_FILES['import']); 15 16 if( ! $info) 17 { 18 $this->error($upload->getError()); 19 }
Dann laufen Einschalten und Importieren der Dateien PHPExcel.php und PHPExcel/IOFactory.php
1 //导入PHPExcel 和 IOFactory类 2 Vendor('PHPExcel.PHPExcel'); 3 Vendor('PHPExcel.PHPExcel.IOFactory');
Weil es importiert wird , die createReader-Methode
heißt$objReader = \PHPExcel_IOFactory::createReader('Excel5');
Legen Sie den Pfad fest, in dem sich die hochgeladene Datei befindet heißt, eine Datei laden
$objPHPExcel = $objReader -> load($file_path, $encode='utf-8');
Wovon wir hier sprechen, ist die Anzahl der durchlaufenen Zeilen von A bis E (von Ihnen selbst definiert, nehmen Sie, was Sie wollen) Hier sollte ich mit 2 beginnen, da die erste Zeile die Überschrift ist, nicht die Daten
1 $sheet = $objPHPExcel -> getSheet(0); 2 $highestRow = $sheet -> getHighestRow(); // 取得总行数 3 // p($highestRow); 4 // $highestColumn = $sheet->getHighestColumn(); // 取得总列数 5 6 for($i=2;$i<=$highestRow;$i++) 7 { 8 $data['user_name'] = $objPHPExcel -> getActiveSheet() -> getCell("A".$i)->getValue(); 9 $data['company'] = $objPHPExcel -> getActiveSheet() -> getCell("B".$i)->getValue(); 10 $data['mobile'] = $objPHPExcel -> getActiveSheet() -> getCell("C".$i)->getValue(); 11 $data['category'] = $objPHPExcel -> getActiveSheet() -> getCell("D".$i)->getValue(); 12 $data['mark'] = $objPHPExcel -> getActiveSheet() -> getCell("E".$i)->getValue(); 13 14 $allData[] = $data; 15 } 16 // p($allData);
Die Testtabelle sieht so aus
Drucken Sie nun $allData aus und Schauen Sie mal
Schauen Sie, die Daten sind raus...
Der nächste Schritt besteht darin, sie zu importieren die Datenbank ->Sie müssen vor dem Import eine kleine Entscheidung treffen, wenn ich beispielsweise möchte, dass die Telefonnummer in der Datenbank mir folgt. Wenn die Daten, die Sie importieren möchten, dieselben sind, importieren Sie so etwas nicht -> ; Hat jemand bessere Methoden?
1 if (empty($allData)) 2 { 3 $this -> error(C('MESSAGE.ERROR_NODATA')); 4 } 5 $data_in_db = M('Excel') -> field('mobile') -> select();//表Excel里所有数据 6 foreach ($data_in_db as $key => $val) 7 { 8 foreach ($allData as $k => $v) 9 { 10 if ($val['mobile'] == $v['mobile']) 11 { 12 unset($allData[$k]); 13 } 14 } 15 }
Beim Importieren gibt es zwei Methoden: eine besteht darin, SQL zu spleißen, die andere darin, eine foreach-Schleife zum Importieren zu verwenden
Beim tatsächlichen Testen ist die erste Methode viel schneller!!! Es wird dringend empfohlen, SQL zu spleißen Die Daten sind zu groß, das gespleißte SQL ist sehr lang, sodass die Daten relativ groß sind ...
Manchmal wird ein Fehler bei der Ausführung der Dateizeitüberschreitung gemeldet oder 1153 – Es wurde ein Paket größer als &lsquo ;max_allowed_packet’ Bytes ODER
Der Server hängt direkt und meldet einen Fehler wie diesen
In diesem Fall müssen Sie max_allowed_packet in my.ini ändern, um es etwas größer einzustellen. Das war's , MySql neu starten
OK.. Warten Sie einen Moment, es werden fast 2 W Daten importiert (^_^)
und mehr Es ist Die Einfügeanweisung, die ich geschrieben habe
1 $sql = "INSERT INTO `db_excel` (". implode(',',array_keys($allData[0])) .") VALUES "; 2 foreach ($allData as $key => $val) 3 { 4 $sql .= "("; 5 $sql .= "'".implode("','", $val)."'"; 6 $sql .= "),"; 7 } 8 $sql = rtrim($sql,','); 9 // 出错返回false 否则返回成功行数 10 $res = D('Excel') -> execute($sql); 11 if ($res === false) 12 { 13 $this -> error(C('MESSAGE.ERROR_IMPORT')); 14 } 15 else if ($res > 0) 16 { 17 $this -> success(C('MESSAGE.SUCCESS_IMPORT'), U('Excel/index')); 18 } 19 else if ($res === 0) 20 { 21 $this -> success(C('MESSAGE.SUCCESS_IMPORT_0'), U('Excel/index')); 22 }
Okay. Das Obige dient der Verwendung von PHPExcel zum Importieren von Excel-Dateien .
Es gibt noch viele Mängel, die geändert werden müssen, und ich hoffe, Sie können darauf hinweisen
Das Obige ist der Inhalt von Thinkphp, das PHPExcel zum Importieren von Excel verwendet. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com)!