Heim > php教程 > php手册 > Thinkphp verwendet PHPExcel, um Excel zu importieren

Thinkphp verwendet PHPExcel, um Excel zu importieren

PHP中文网
Freigeben: 2016-08-29 08:36:48
Original
1144 Leute haben es durchsucht

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             }
Nach dem Login kopieren


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');
Nach dem Login kopieren


Weil es importiert wird , die createReader-Methode

heißt


$objReader = \PHPExcel_IOFactory::createReader('Excel5');
Nach dem Login kopieren


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');
Nach dem Login kopieren


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[&#39;user_name&#39;] = $objPHPExcel -> getActiveSheet() -> getCell("A".$i)->getValue(); 
 9     $data[&#39;company&#39;]   = $objPHPExcel -> getActiveSheet() -> getCell("B".$i)->getValue();
 10    $data[&#39;mobile&#39;]    = $objPHPExcel -> getActiveSheet() -> getCell("C".$i)->getValue();
 11     $data[&#39;category&#39;]  = $objPHPExcel -> getActiveSheet() -> getCell("D".$i)->getValue();
 12    $data[&#39;mark&#39;]      = $objPHPExcel -> getActiveSheet() -> getCell("E".$i)->getValue();
 13                 
 14                 $allData[] = $data;
 15             }
 16             // p($allData);
Nach dem Login kopieren


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(&#39;MESSAGE.ERROR_NODATA&#39;)); 
 4             } 
 5             $data_in_db = M(&#39;Excel&#39;) -> field(&#39;mobile&#39;) -> select();//表Excel里所有数据 
 6             foreach ($data_in_db as $key => $val) 
 7             { 
 8                 foreach ($allData as $k => $v) 
 9                 {
 10                     if ($val[&#39;mobile&#39;] == $v[&#39;mobile&#39;])
 11                     {
 12                         unset($allData[$k]);
 13                     }
 14                 }
 15             }
Nach dem Login kopieren


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(&#39;,&#39;,array_keys($allData[0])) .") VALUES "; 
 2             foreach ($allData as $key => $val) 
 3             { 
 4                 $sql .= "("; 
 5                 $sql .= "&#39;".implode("&#39;,&#39;", $val)."&#39;"; 
 6                 $sql .= "),"; 
 7             } 
 8             $sql = rtrim($sql,&#39;,&#39;); 
 9             // 出错返回false 否则返回成功行数
 10             $res = D(&#39;Excel&#39;) -> execute($sql);
 11             if ($res === false)
 12             {
 13                 $this -> error(C(&#39;MESSAGE.ERROR_IMPORT&#39;));
 14             }
 15             else if ($res > 0)
 16             {
 17                 $this -> success(C(&#39;MESSAGE.SUCCESS_IMPORT&#39;), U(&#39;Excel/index&#39;));
 18             }
 19             else if ($res === 0)
 20             {
 21                 $this -> success(C(&#39;MESSAGE.SUCCESS_IMPORT_0&#39;), U(&#39;Excel/index&#39;));
 22             }
Nach dem Login kopieren


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)!



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage