> 백엔드 개발 > PHP 튜토리얼 > PHPExcel을 사용하여 매우 큰 Excel 파일을 읽는 방법

PHPExcel을 사용하여 매우 큰 Excel 파일을 읽는 방법

WBOY
풀어 주다: 2016-07-30 13:31:57
원래의
1175명이 탐색했습니다.

원저작물, 전재 가능합니다. 재인쇄 시 반드시 기사 원본 출처, 저자 정보 및 본 내용을 하이퍼링크 형태로 표시해 주시기 바랍니다. 그렇지 않으면 법적 책임이 추구됩니다. 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초로 설정해 보았는데 여전히 4,000행의 다채로운 테이블을 읽을 수 없었습니다. 그 이유는 모든 처리 결과를 배열로 저장하는 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.     } 

위 방법은 모든 유닛을 결합하려는 경우 더 복잡한 상황입니다. 전체 그리드를 읽으려면 다음 방법을 사용하면 됩니다.

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

위의 print_r을 결합된 sql 문으로 변경하여 파일에 쓴 다음 mysql을 사용하여 가져올 수 있습니다. , 데이터베이스에 직접 연결할 수도 있습니다. 테이블에 레코드를 삽입하는 것은 보기만큼 쉽습니다.

이 방법을 사용하면 수만 행의 레코드를 쉽게 테이블로 가져올 수 있으므로 모든 사람에게 도움이 되기를 바랍니다.

이 글은 "Fanxing's Technology Blog" 블로그에서 가져온 것입니다. http://ustb80.blog.51cto.com/6139482/1066505

위 내용은 관련 내용을 포함하여 PHPExcel을 사용하여 매우 큰 엑셀 파일을 읽는 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿