2010-06-03 23 views
5

Estoy tratando de leer un archivo Excel de 17MB (2003) con PHPExcel1.7.3c, pero ya se aplasta mientras carga el archivo, después de exceder el límite de 120 segundos que tengo. ¿Hay otra biblioteca que pueda hacerlo de manera más eficiente? No necesito diseñar, solo lo necesito para soportar UTF8. Gracias por su ayudaLectura de archivos grandes de Excel con PHP

Respuesta

8

Tamaño de archivo no es una buena medida cuando se utiliza PHPExcel, es más importante tener una idea del número de celdas (rowsxcolumns) en cada hoja de cálculo.

Si usted no tiene ninguna necesidad para el peinado, está llamando:

$objReader->setReadDataOnly(true); 

antes de cargar el archivo?

Si no necesita acceder a todas las hojas de trabajo, o solamente ciertas células dentro de una hoja de trabajo, buscar en el uso

$objReader->setLoadSheetsOnly(array(1,2)) 

o

$objReader->setLoadSheetsOnly(1) 

o la definición de un readFilter

Son Estás usando el caché de la celda? Si es así, ¿qué método? Eso ralentiza el tiempo de carga.

1

17 MB es un archivo pesado.

Tiempo de duración de un archivo de 1MB para que pueda calcular cuánto tardaría un archivo de 17MB. Entonces, una opción podría ser simplemente aumentar su límite de 120 segundos.

Alternativamente, podría exportar a CSV, que será mucho más eficiente, e importarlo a través de fgetcsv de PHP.

1

He oído que Excel Explorer es mejor en la lectura de archivos de gran tamaño.

+2

A $ 500 para uso comercial, espero que sea mejor –

+0

El precio y la calidad no tienen ninguna correlación. Solo necesita una licencia personal de $ 99 si desea usarla para su propia aplicación web. – Sjoerd

0

Quizás podría convertir/exportar a csv, y usar fgetcsv incorporado(). Depende del tipo de funcionalidad que necesita.

2

Si lo único que necesita de su lectura de archivos Excel es de datos, aquí es mi manera de leer grandes archivos de Excel:

instalo Gnumeric en mi servidor, es decir, con Debian/Ubuntu: apt-get install Gnumeric

Entonces el php llama para leer mi archivo de Excel y almacenarla en una matriz de datos dimensionnal dos son increíblemente simple (dimensiones son filas y columnas):

system("ssconvert \"$excel_file_name\" \"temp.csv\""); 
$array = array_map("str_getcsv", file("temp.csv")); 

entonces puedo hacer lo que quiero con mi formación. ¡Esto toma menos de 10 segundos para un archivo xls grande de 10 MB, al mismo tiempo que necesitaría cargar el archivo en mi programa de hoja de cálculo favorito!

Para archivos muy grandes, debe usar fopen() y file_getcsv() funciones y hacer lo que tiene que hacer sin almacenar datos en una gran matriz para evitar almacenar todo el archivo csv en memoria con la función file() . Esto será más lento, ¡pero no se comerá toda la memoria de su servidor!

0

Actualmente estoy usando la hoja de cálculo-lector (https://github.com/nuovo/spreadsheet-reader), que es bastante rápido en la lectura de XLSX, ODS y CSV, y tiene los problemas mencionados sólo en el formato de lectura XLS.

Cuestiones relacionadas