Heim > Backend-Entwicklung > PHP-Tutorial > So lesen Sie sehr große Excel-Dateien mit PHPExcel

So lesen Sie sehr große Excel-Dateien mit PHPExcel

WBOY
Freigeben: 2016-07-30 13:31:57
Original
1176 Leute haben es durchsucht

Originalwerke, Nachdruck ist gestattet. Bitte geben Sie beim Nachdruck unbedingt die Originalquelle , die Autoreninformationen und diese Erklärung in Form eines Hyperlinks an. Andernfalls wird eine gesetzliche Haftung verfolgt. http://ustb80.blog.51cto.com/6139482/1066505

Bei meiner Arbeit stoße ich oft auf das Problem, einen Teil der XLSX-Datei in die Datenbank zu importieren. Normalerweise verwenden wir PHPExcel zum Lesen.

Mit der folgenden Methode können wir ganz einfach eine Excel-Tabelle in ein PHP-Array einlesen und dann tun, was wir wollen:

Wenn der Artikel hier endet, wird er nicht sein von großem Wert.
  1. $input_file = "data.xlsx"
  2. $objPHPExcel = PHPExcel_IOFactory::load($input_file); 
  3. $sheetData = $objPHPExcel->getSheet(0)->toArray(null, true, true, true); 

Unglückliche Situationen gibt es immer, wenn data.xlsx Zehntausende Zeilen hat, jede Zeile viele Spalten hat, jede Spalte lange Zeichenfolgen hat und einige Farben und andere Effekte haben, was bei der oben genannten Methode oft passiert ist nicht genügend Speicher vorhanden.

Nun, wir haben auch ini_set, um den Speicher zu erhöhen, und wir können set_time_limit auch verwenden, um ein längeres Timeout festzulegen, wie folgt:

Aber um ganz verantwortungsbewusst zu sein, das ist nicht der Fall Die ultimative Lösung.
  1. set_time_limit(90); 
  2. ini_set("memory_limit", "1024M"); 
  3. $input_file = "data.xlsx"
  4. $objPHPExcel = PHPExcel_IOFactory::load($input_file); 
  5. $sheetData = $objPHPExcel->getSheet(0)->toArray(null, true, true, true); 

Ich habe einmal versucht, den Speicher auf 2G und das Timeout auf 90 Sekunden einzustellen, konnte aber immer noch keine bunte Tabelle mit 4.000 Zeilen lesen. Der Grund liegt in der toArray-Methode, die alle Verarbeitungsergebnisse in einem Array speichert. Diese Methode ist bei der Verarbeitung einfacher Tabellen sehr praktisch, bei der Verarbeitung großer Tabellen jedoch wirklich nutzlos.

Unsere Lösung ist wie folgt:

Die obige Methode ist eine kompliziertere Situation, wenn Sie nur alle Einheiten kombinieren möchten Um das gesamte Raster auszulesen, verwenden Sie einfach die folgende Methode:
  1. require 'lib/PHPExcel.php'; 
  2.  
  3. set_time_limit(90); 
  4. $input_file = "data.xlsx"
  5. $objPHPExcel = PHPExcel_IOFactory::load($input_file); 
  6.  
  7. // 读取规则 
  8. $sheet_read_arr = array(); 
  9. $sheet_read_arr["sheet1"] = array("A","B","C","D","F"); 
  10. $sheet_read_arr["sheet2"] = array("A","B","C","D","F"); 
  11.  
  12. // 循环所有的页 
  13. foreach ($sheet_read_arr as $key => $val) 
  14.     $currentSheet = $objPHPExcel->getSheetByName($key);// 通过页名称取得当前页 
  15.     $row_num = $currentSheet->getHighestRow();// 当前页行数 
  16.  
  17.     // 循环从第二行开始,第一行往往是表头 
  18.     for ($i = 2; $i <= $row_num; $i++)
  19. {
  20. $cell_values = array();
  21. foreach ($val as $cell_val)
  22. {
  23. $address = $cell_val . $i;// 单元格坐标
  24. // 读取单元格内容
  25. $cell_values[] = $currentSheet->getCell($address)->getFormattedValue(); 
  26.         } 
  27.  
  28.         // 看看数据 
  29.         print_r($cell_values); 
  30.     } 

Wir können das obige print_r in eine kombinierte SQL-Anweisung ändern und es in die Datei schreiben und es dann natürlich mit MySQL importieren , wir können auch direkt eine Verbindung zur Datenbank herstellen. Das Einfügen von Datensätzen in die Tabelle ist so einfach, wie es scheint.
  1. require 'lib/PHPExcel.php'; 
  2.  
  3. set_time_limit(90); 
  4. $input_file = "data.xlsx"
  5. $objPHPExcel = PHPExcel_IOFactory::load($input_file); 
  6.  
  7. $sheet_count = $objPHPExcel->getSheetCount(); 
  8. for ($s = 0; $s < $sheet_count; $s++)
  9. {
  10. $currentSheet = $objPHPExcel->getSheet($s);// 当前页 
  11.     $row_num = $currentSheet->getHighestRow();// 当前页行数 
  12.     $col_max = $currentSheet->getHighestColumn(); // 当前页最大列号 
  13.  
  14.     // 循环从第二行开始,第一行往往是表头 
  15.     for($i = 2; $i <= $row_num; $i++)
  16. {
  17. $cell_values = array();
  18. for($j = 'A'; $j < $col_max; $j++)
  19. {
  20. $address = $j . $i; // 单元格坐标
  21. $cell_values[] = $currentSheet->getCell($address)->getFormattedValue(); 
  22.         } 
  23.  
  24.         // 看看数据 
  25.         print_r($cell_values); 
  26.     } 

Mit dieser Methode können Zehntausende von Datensatzzeilen problemlos in die Tabelle importiert werden. Ich hoffe, dass sie für alle hilfreich ist.

Dieser Artikel stammt aus dem Blog „Fanxing's Technology Blog“. Bitte bewahren Sie diese Quelle unbedingt auf: http://ustb80.blog.51cto.com/6139482/1066505

Das Obige stellt vor, wie man mit PHPExcel sehr große Excel-Dateien liest, einschließlich der relevanten Inhalte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

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 Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage