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

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

Просто игнорировать пустые строки - плохая идея. Разница между выборкой первых 20 строк и 20 строк из конца файла порядка 20 мб оперативной памяти и 20 секунд исполнения (это на локалке, а что будет на хостинге - боюсь представить), что совсем не комильфо.
  • Вопрос задан
  • 3640 просмотров
Пригласить эксперта
Ответы на вопрос 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']}";
				}
				
			}

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

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

Войти через центр авторизации
Похожие вопросы