Задать вопрос

PHPExcel — проблема с построчным чтением. Как решить?

Мне нужно считать большой файл 17к+ строк.
Пробовал делать это так, как предлагает парень вот здесь.
Но возникла проблема. Когда я указываю (допустим) стартовую строку - 5000, и размер чанка - 20, то этот скрипт выводит не 20 строк, а 5020. Первые 5000 из которых пустые. Как с этим бороться?

Просто игнорировать пустые строки - плохая идея. Разница между выборкой первых 20 строк и 20 строк из конца файла порядка 20 мб оперативной памяти и 20 секунд исполнения (это на локалке, а что будет на хостинге - боюсь представить), что совсем не комильфо.
  • Вопрос задан
  • 3652 просмотра
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@yaraj841
$inputFileType = PHPExcel_IOFactory::identify($filePath);

			/**  Create an Instance of our Read Filter  * */
			$objReader = PHPExcel_IOFactory::createReader($inputFileType);

			$chunkSize = 0;
			$singleRow = new SingleRowFilter();
			$objReader->setReadFilter($singleRow);
			$objReader->setReadDataOnly(true);
			$objReader->setLoadSheetsOnly(0);
			//$rowFilter = new SingleRowFilter();
			/**  Tell the Reader that we want to use the Read Filter  * */
			//$objReader->setReadFilter($rowFilter);
			$objReaderExcel = $objReader->load($filePath);
			$objReaderExcel->setActiveSheetIndex(0);
			$sheet = $objReaderExcel->getActiveSheet();
			$count = $sheet->getHighestRow();
			$countInsert = 0;

			for ($i = 4 + $chunkSize; $i < $count; $i++) {
				//$rowFilter->setRow($i);
				/**  Load only the single row that matches our filter to PHPExcel  * */
				$row = $sheet->rangeToArray("A{$i}:W{$i}");

				$resultArray = $registryImport->insertOneRow($param['customerId'], $row[0]);
				if ($resultArray['success']) {
					$countInsert++;
				} else {
					$arrayError[] = "Строка: {$i} {$resultArray['msg']}";
				}
				
			}

Это готовый кусок кода который позволяет считывать построчно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽