2011-02-04 37 views
8

Puede alguien decirme por qué PHPExcel no permite más de 5000 filas. Estoy usando PHPExcel de código abierto para generar informes en mis proyectos y no pude escribir más de 5000 filas de datos de Mysql-DB. Mi conjunto de resultados recupera 7230 registros cuando se ejecuta la consulta. Cómo lo soluciono ...PHPExcel no permite escribir más de 5000 filas

+0

¿Puede recuperar exactamente 5000 filas? Si ese es el caso, puede haber una limitación en PHPExcel, probablemente sea mejor que pregunte en el foro de soporte de CodePlex. Siempre he encontrado que el soporte para PHPExcel es bastante bueno. Si no, es probable que sea un problema de memoria/tiempo de espera con su servidor. – user183037

Respuesta

15

Es casi seguro que este es un tiempo de espera o un problema de memoria. El único límite de PHPExcel para el tamaño de las hojas de cálculo es 65.536 filas y 256 (IV) columnas (cuando se utiliza el Escritor de Excel5); o 1,048,576 filas y 16,384 (XFD) columnas (cuando se utiliza el escritor Excel2007).

asegurarse de que su registro de errores está habilitado siempre ... bloques uso try/catch para atrapar ninguna excepción PHPExcel. Y lea los hilos de discusión del sitio PHPExcel sobre la memoria y el rendimiento.

1

Sin tener el código o el código de la clase es bastante difícil, creo ... ¿Quiere decir que no puede escribir más de 5k filas en un archivo XLS o dentro de una hoja de trabajo? de lo contrario, una solución fea podría ser escribir 5K filas en la primera hoja y el resto en la segunda (por lo que 5K filas cada hoja, si DB se hace más grande). no creo XLS tiene un 5k filas limitaciones, por lo que debe haber algo mal o mal configurado en su script..Have intentado varias veces? ¿Siempre imprime 5k filas? o podría ser debido a tiempos de espera? (De su script o conexión)

0

Este tipo de problema es más que probable que un problema de memoria del servidor. ¿En qué tipo de servidor estás y estás seguro de que tiene suficiente memoria y recursos disponibles para procesar grandes archivos de datos? Si no puede decir de ninguna manera, lo mejor es leer en unos pocos miles de registros a la vez, procesarlos y luego pasar al siguiente fragmento. Yo mismo preferiría romper el gran archivo de datos en pedazos manejables (archivos), sobre los cuales podría procesar posteriormente cada una de esas piezas para obtener el resultado deseado. Una vez que se procesan todas las piezas, pueden fusionarse para crear un nuevo archivo de datos de gran tamaño.

9

que tenían el mismo problema. Deberá asignar suficiente tiempo y límite de memoria.

He probado mi solución de 3 servidor diferente aquí es el resultado:

Cerca de 5000 registros (12 columnas)

archivo de lectura:
09:48:22 uso de la memoria Peak: 1,25 MB

datos de lectura:
09:48:31 uso de la memoria de pico: 54,5 MB

Después de indexación de datos en una matriz :
09:48:35 uso de la memoria de pico: 68,5 MB

Records: 4504

que aumentó la memoria y el tiempo de leer 22.000 registros después de la indexación se subió a 370.00MB

Aquí está la solución (siendo dado que todo lo demás es correcto en la secuencia de código) donde se llama a PHPExcel en su programa/función:

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

Haz todo inicialización aquí para que todos los objetos están listos a continuación, asignar memoria para la lectura de los datos del archivo y de indización en la estructura interna del programa:

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! 

Una buena idea es haber logrado todo esto por algunas categorías de datos, de modo que no se quede en 400 MB - propenso a errores!

+0

ini_set ('memory_limit', '-1'); solo tiende a arreglar esto – maxhud

2

Casi con certeza esto es un tiempo de espera o un problema de memoria. El único límite de PHPExcel para el tamaño de las hojas de cálculo es 65.536 filas y 256 (IV) columnas (cuando se utiliza el Escritor de Excel5); o 1,048,576 filas y 16,384 (XFD) columnas (cuando se utiliza el escritor Excel2007).

Usted puede cambiar esta línea

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

como

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

Luego se permite escribir los registros de más de 65.536 filas.

Cuestiones relacionadas