Чтение указанного количества строк в огромном файле Excel

#php #excel-reader

#php #excel-reader

Вопрос:

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

 $xls = new Spreadsheet_Excel_Reader($path);
$dd=array(0);
for($row=2;$row<=10;$row  ){
$val=$xls->val($row,$field);
}
  

Это занимает много времени при каждом чтении файла, потому что файл огромен. Файл также перезагружается каждый раз.

Как я могу читать только требуемые строки файла, чтобы сэкономить время??

Ответ №1:

Файл будет перезагружаться каждый раз, когда выполняется PHP-скрипт, просто из-за того, что он не сохраняет предыдущее состояние. Когда вы говорите о большом файле, о скольких записях / байтах мы говорим?

Чтобы ускорить чтение такого файла, вы можете поместить его на диск RAM (если используете Linux), который намного быстрее, чем SSD. Или прочитайте его и сохраните эквивалент CSV с фиксированной длиной записи. Фиксированные длины записей позволят вам переходить к сегментам по своему усмотрению и легко извлекать количество записей.

Итак, если длина вашей записи стала 90 байт / символов, и вы хотите, чтобы записи были от 100 до 109, вы должны открыть файл для чтения, fseek в позиции 9000 (90 * 100) и захватить следующие 900 символов.

Комментарии:

1. Есть ли способ отформатировать файл для чтения строк только от 100 до 109, который просто сохраняет эти строки в памяти и не сохраняет остальные строки??

2. Все зависит от того, насколько автоматизированным вы хотите сделать процесс. Если файл XLS генерируется раз в месяц, то стоило бы сохранить его как CSV, а затем использовать это. Если он генерируется каждый час или день или около того другим процессом, тогда это становится другим предложением. Кроме того, какую версию файла XLS вы используете? Если они имеют размер XLSX, то будет израсходована память, поскольку файл необходимо будет разархивировать, прежде чем можно будет извлечь содержимое (что делается в памяти). Содержит ли файл один лист или задействовано несколько листов?