Чтение большого файла Excel с PHP - PullRequest
5 голосов
/ 03 июня 2010

Я пытаюсь прочитать файл Excel объемом 17 МБ (2003) с помощью PHPExcel1.7.3c, но он уже ломается при загрузке файла после превышения установленного ограничения в 120 секунд. Есть ли другая библиотека, которая может сделать это более эффективно? Мне не нужен стиль, мне нужно только поддержка UTF8. Спасибо за вашу помощь

Ответы [ 6 ]

8 голосов
/ 03 июня 2010

Размер файла не является хорошей мерой при использовании PHPExcel, более важно получить некоторое представление о количестве ячеек (rowxcolumns) в каждом рабочем листе.

Если вам не нужно стайлинг, звоните:

$objReader->setReadDataOnly(true);

перед загрузкой файла?

Если вам не нужен доступ ко всем рабочим листам или только к определенным ячейкам в рабочем листе, посмотрите на использование

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

или

$objReader->setLoadSheetsOnly(1)

или определение readFilter

Вы используете кеширование клеток? Если да, то какой метод? Это замедляет время загрузки.

2 голосов
/ 17 сентября 2013

Если из прочитанного файла Excel вам нужны только данные, вот мой способ чтения огромных файлов Excel:

Я устанавливаю gnumeric на свой сервер, то есть с помощью debian / ubuntu: apt-get установить gnumeric

Тогда php вызывает, чтобы прочитать мой файл Excel и сохранить его в двухмерном массиве данных, невероятно просто (измерения - это строки и столбцы):

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

Тогда я могу делать то, что хочу, с моим массивом. Это занимает менее 10 секунд для большого xls-файла размером 10 МБ, в то же время мне потребуется загрузить файл в мое любимое программное обеспечение для работы с электронными таблицами!

Для очень больших файлов вы должны использовать функции fopen () и file_getcsv () и делать то, что вам нужно, без сохранения данных в огромном массиве, чтобы избежать сохранения всего файла csv в памяти вместе с file () функция. Это будет медленнее, но не съест всю память вашего сервера!

1 голос
/ 03 июня 2010

Я слышал, что Excel Explorer лучше при чтении больших файлов.

1 голос
/ 03 июня 2010

17MB - здоровенный файл.

Время, которое занимает анализ файла 1 МБ, чтобы вы могли определить, сколько времени займет файл 17 МБ. Тогда одним из вариантов может быть увеличение вашего 120-секундного лимита.

В качестве альтернативы, вы можете экспортировать в CSV, что будет гораздо более эффективно, и импортировать через PHP fgetcsv.

0 голосов
/ 01 апреля 2015

В настоящее время я использую программу для чтения электронных таблиц (https://github.com/nuovo/spreadsheet-reader), которая довольно быстро читает XLSX, ODS и CSV и имеет проблемы, упомянутые только при чтении формата XLS .

0 голосов
/ 29 июня 2010

Может быть, вы сможете конвертировать / экспортировать в csv и использовать встроенную функцию fgetcsv (). Зависит от того, какая функциональность вам нужна.

...