2011-02-04 13 views
8

PHPExcel이 5000 행 이상을 허용하지 않는 이유는 무엇입니까? 내 프로젝트에서 보고서 생성을 위해 오픈 소스 PHPExcel을 사용 중이고 Mysql-DB에서 5000 개가 넘는 데이터 행을 쓸 수 없습니다. 결과가 설정되면 쿼리가 실행될 때 7230 개의 레코드가 페치됩니다. 어떻게 해결할 수 있습니까?PHPExcel이 5000 개가 넘는 행을 쓸 수없는 이유

+0

정확하게 5000 개의 행을 검색 할 수 있습니까? 그렇다면 PHPExcel에 제한이있을 수 있습니다. CodePlex의 지원 포럼에 질문하는 것이 더 나을 것입니다. PHPExcel에 대한 지원이 항상 좋은 것으로 나타났습니다. 그렇지 않은 경우 서버에 대한 메모리/시간 초과 문제 일 수 있습니다. – user183037

답변

15

거의 확실히 이것은 타임 아웃 또는 메모리 문제입니다. 워크 시트 크기에 대한 유일한 PHPExcel 제한은 65,536 행과 256 (IV) 열입니다 (Excel5 Writer 사용시). 또는 1,048,576 행 및 16,384 (XFD) 열 (Excel2007 Writer 사용시).

오류 로깅이 항상 활성화되어 있는지 확인하십시오. try/catch 블록을 사용하여 PHPExcel 예외를 트래핑하십시오. 그리고 메모리와 성능에 대한 PHPExcel 사이트 토론 스레드를 읽으십시오.

1

코드가 없거나 클래스의 코드가 매우 어렵다고 생각합니다 ... XLS 파일 또는 워크 시트 내부에 5k 행 이상을 쓸 수 없다는 것을 의미합니까? 그렇지 않으면 못생긴 해결 방법은 첫 번째 시트에 5K 행을 쓰고 나머지는 두 번째 시트에 쓰는 것입니다 (DB가 커지면 각 시트별로 5K 행). XLS에 5k 행 제한이 있다고 생각하지 않으므로 스크립트에 잘못되었거나 잘못 설정되어 있어야합니다. 여러 번 시도해 보셨습니까? 항상 5k 행을 인쇄합니까? 또는 시간 초과로 인한 것일 수 있습니까? (스크립트 또는 연결)

0

이 유형의 문제는 서버 메모리 문제 일 가능성이 높습니다. 어떤 유형의 서버를 사용하고 있으며 대용량 데이터 파일을 처리 할 수있는 충분한 메모리와 리소스가 있는지 확실합니까? 어떤 방법 으로든 말할 수 없다면, 최선의 해결 방법은 한 번에 수천 개의 레코드를 읽고 처리 한 후 다음 청크로 이동하는 것입니다. 나 자신은 대용량 데이터 파일을 다루기 쉬운 조각 (파일)로 나누는 것을 선호 할 것이며, 그 후에 각각의 조각을 처리하여 원하는 결과를 얻을 수 있습니다. 모든 조각이 처리되면 함께 병합하여 새로운 대용량 데이터 파일을 만들 수 있습니다.

9

나는 동일한 문제가있었습니다. 충분한 시간과 메모리 제한을 할당해야합니다.

여기 3 개의 다른 서버에서 내 솔루션은 결과 테스트 한 :

약 5000 기록 (12 열)

읽기 파일 :
9시 48분 22초 피크 메모리 사용량 : 1.25 MB

읽기 데이터 :
9시 48분 31초 피크 메모리 사용량 : 배열로 인덱스 데이터 후 54.5 MB

:
9시 48분 35초 피크 메모리 사용량 :

4504가 내가 370까지 갔다 색인 후 22.000 기록을 읽을 수있는 메모리와 시간을 증가 : MB

기록 68.5.00메가바이트

여기에 (다른 모든 코드 시퀀스에서 올바른지 주어지는) 솔루션 당신이 당신의 프로그램/기능에 PHPExcel를 호출 :

ini_set("max_execution_time", 'time_limit'); //see manual 

모든 오브젝트가 준비 그래서 여기에 모든 초기화를 수행 다음 프로그램 내부 구조에 파일 및 색인 데이터를 읽기위한 메모리를 할당 :

ini_set('memory_limit', '???'); //your memory limit as string 
$excel = $excelReader->load($filePath); 
"Memory usage: " . (memory_get_peak_usage(true)/1024/1024) . " MB" 
//do the rest of the structure! 

좋은 아이디어는 당신이 400메가바이트로 실행하지 않아도 데이터의 일부 범주에 의해 모든 것을 관리해야하는 것입니다 - 에러 경향이!

+0

ini_set ('memory_limit', '-1'); 혼자서이 문제를 해결하는 경향이있다. – maxhud

2

거의 확실하게 타임 아웃 또는 메모리 문제입니다. 워크 시트 크기에 대한 유일한 PHPExcel 제한은 65,536 행과 256 (IV) 열입니다 (Excel5 Writer 사용시). 또는 1,048,576 행 및 16,384 (XFD) 열 (Excel2007 Writer 사용시).

당신은

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 

는 그 다음 레코드 개 이상의 65536 개 행을 작성할 수 있습니다으로이 라인

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 

을 변경할 수 있습니다.

관련 문제