首頁  >  文章  >  後端開發  >  如何用PHPExcel讀取超大excel文件

如何用PHPExcel讀取超大excel文件

WBOY
WBOY原創
2016-07-30 13:31:571171瀏覽

原創作品,允許轉載,轉載時請務必以超載形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。 http://ustb80.blog.51cto.com/6139482/1066505

工作中經常要遇到將xlsx檔案中的部分內容匯入到資料庫。通常我們都是用PHPExcel來讀取。

透過下面的方法我們可以很容易地將一個excel表格讀取成為php數組,之後就可以為所欲為:

  1. $input_file = "data.xlsx"
  2. $objPHPExcel = PHPExcel_IOFactory::load($input_file); 
  3. $sheetData = $objPHPExcel->getSheet(0)->toArray(null, true, true, true); 

如果文章到此結束,那價值就不大了。

很不幸的情況總是存在的,當data.xlsx有上萬行,每一行又有很多列,每一列又有很長的字符串,並且有的還有顏色等效果時,用上面的方法常發生的情況就是記憶體不足。

好吧,我們還有ini_set來加大內存,還可以用set_time_limit來設置較長的超時,如下:

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

但很負責任的說,這些都不是終極的方案。

我曾經試過將內存設定到了2G,超時設定到了90秒,也仍然讀不出一個4000行的花花綠綠的表格。原因都出在toArray這個方法上,它會將處理的結果全保存到數組中,這種方式在處理簡單表格時還是很方便的,但在處理大表格時,真的是很杯具。

我們的解決方案如下:

  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.     } 

上面的方式算是較複雜的情況了,如果只是想將所有的單元格全讀出來,用下面的方法就行了:

reee

我們可以將上面的print_r地方改成組拼sql語句並寫入文件,然後用mysql導入,當然也可以直接連接資料庫向表中插入記錄,這就隨意了。

用這種方法可以將上萬行的記錄很輕鬆的導入到表中,希望對大家有幫助。

本文出自 “凡星的技術博客” 博客,請務必保留此出處http://ustb80.blog.51cto.com/6139482/1066505

以上就介紹如何用PHPExcel讀取超大excel文件,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:ThinkPHP-31下一篇:ThinkPHP-31