PHPExcel이 5000 행 이상을 허용하지 않는 이유는 무엇입니까? 내 프로젝트에서 보고서 생성을 위해 오픈 소스 PHPExcel을 사용 중이고 Mysql-DB에서 5000 개가 넘는 데이터 행을 쓸 수 없습니다. 결과가 설정되면 쿼리가 실행될 때 7230 개의 레코드가 페치됩니다. 어떻게 해결할 수 있습니까?PHPExcel이 5000 개가 넘는 행을 쓸 수없는 이유
답변
거의 확실히 이것은 타임 아웃 또는 메모리 문제입니다. 워크 시트 크기에 대한 유일한 PHPExcel 제한은 65,536 행과 256 (IV) 열입니다 (Excel5 Writer 사용시). 또는 1,048,576 행 및 16,384 (XFD) 열 (Excel2007 Writer 사용시).
오류 로깅이 항상 활성화되어 있는지 확인하십시오. try/catch 블록을 사용하여 PHPExcel 예외를 트래핑하십시오. 그리고 메모리와 성능에 대한 PHPExcel 사이트 토론 스레드를 읽으십시오.
코드가 없거나 클래스의 코드가 매우 어렵다고 생각합니다 ... XLS 파일 또는 워크 시트 내부에 5k 행 이상을 쓸 수 없다는 것을 의미합니까? 그렇지 않으면 못생긴 해결 방법은 첫 번째 시트에 5K 행을 쓰고 나머지는 두 번째 시트에 쓰는 것입니다 (DB가 커지면 각 시트별로 5K 행). XLS에 5k 행 제한이 있다고 생각하지 않으므로 스크립트에 잘못되었거나 잘못 설정되어 있어야합니다. 여러 번 시도해 보셨습니까? 항상 5k 행을 인쇄합니까? 또는 시간 초과로 인한 것일 수 있습니까? (스크립트 또는 연결)
이 유형의 문제는 서버 메모리 문제 일 가능성이 높습니다. 어떤 유형의 서버를 사용하고 있으며 대용량 데이터 파일을 처리 할 수있는 충분한 메모리와 리소스가 있는지 확실합니까? 어떤 방법 으로든 말할 수 없다면, 최선의 해결 방법은 한 번에 수천 개의 레코드를 읽고 처리 한 후 다음 청크로 이동하는 것입니다. 나 자신은 대용량 데이터 파일을 다루기 쉬운 조각 (파일)로 나누는 것을 선호 할 것이며, 그 후에 각각의 조각을 처리하여 원하는 결과를 얻을 수 있습니다. 모든 조각이 처리되면 함께 병합하여 새로운 대용량 데이터 파일을 만들 수 있습니다.
나는 동일한 문제가있었습니다. 충분한 시간과 메모리 제한을 할당해야합니다.
여기 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메가바이트로 실행하지 않아도 데이터의 일부 범주에 의해 모든 것을 관리해야하는 것입니다 - 에러 경향이!
ini_set ('memory_limit', '-1'); 혼자서이 문제를 해결하는 경향이있다. – maxhud
거의 확실하게 타임 아웃 또는 메모리 문제입니다. 워크 시트 크기에 대한 유일한 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');
을 변경할 수 있습니다.
- 1. 100 개가 넘는 이미지가있는 UIScrollView
- 2. 100,000,000 개가 넘는 레코드로 텍스트 파일 정렬
- 3. 600 개가 넘는 연결을 가진 MySQL
- 4. Cassandra-cli가 100 개가 넘는 결과를 반환합니다.
- 5. 몇 개가 넘는 파티션이 의미가 없습니까?
- 6. 1 천만 개가 넘는 행을 가진 MySQL 테이블 액세스 = 오류 : 너무 많은 연결
- 7. SQL Server 2008 FTS CONTAINSTABLE 5 개가 넘는 행을 반환하지 않음
- 8. BulkMutateJob 서비스를 사용하여 800 개가 넘는 텍스트 광고를 만드는 방법
- 9. 드롭 다운 목록에 1000 개가 넘는 레코드가 표시되지 않습니다.
- 10. hibernate HQL 목록에 50000 개가 넘는 레코드를 가져올 수 없습니다.
- 11. nvarchar (최대) 필드에 8000 개가 넘는 MSSQL을 삽입하십시오.
- 12. sqlite를 사용하여 1000 개가 넘는 레코드를 대량 삽입하는 방법은 무엇입니까?
- 13. Virtuemart/Joomla 카테고리 1000 개가 넘는 항목이 매우 희박합니다.
- 14. PHP ZipArchive가 700 개가 넘는 파일을 추가하지 않습니다.
- 15. Django 모델 개요 : 100 개가 넘는 항목을 표시 하시겠습니까?
- 16. 1,000,000,000 개가 넘는 행으로 구성된 거대한 테이블을 보관하는 모범 사례
- 17. ASP.NET의 DirectorySearcher에서 1000 개가 넘는 레코드를 가져올 수 있습니까?
- 18. 20 개가 넘는 필드가있는 양식을 디자인하는 가장 좋은 방법은 무엇입니까?
- 19. JDBCTemplate이 1500 개가 넘는 레코드를 가져 오지 않았습니다.
- 20. 알 수없는 충돌 이유
- 21. WebResources를 찾을 수없는 이유
- 22. MySQL 오류, 알 수없는 이유
- 23. 아음속 SimpleRepository 쓸 수없는 문자열 문제
- 24. 환경 변수에 쓸 수없는 이유는 무엇입니까?
- 25. CipherOutputStream이 ByteArrayOutputStream에 쓸 수없는 이유는 무엇입니까?
- 26. 할당 큰 (5000) 배열
- 27. 큰 테이블 (1 천만 개가 넘는 행)에 대한 MySQL 인덱스
- 28. 500 만 개가 넘는 행의 MySQL 삽입 - x 개의 행마다 커밋 옵션이 필요합니까?
- 29. 단일보기에서 40-50 개가 넘는 텍스트 필드와 레이블을 만드는 방법은 무엇입니까?
- 30. 100 개가 넘는 프로젝트로 구성된 솔루션은 빌드하는 데 5 분 이상 걸립니다.
정확하게 5000 개의 행을 검색 할 수 있습니까? 그렇다면 PHPExcel에 제한이있을 수 있습니다. CodePlex의 지원 포럼에 질문하는 것이 더 나을 것입니다. PHPExcel에 대한 지원이 항상 좋은 것으로 나타났습니다. 그렇지 않은 경우 서버에 대한 메모리/시간 초과 문제 일 수 있습니다. – user183037