NearYou
@NearYou
PHP Developer

Возможно ли как то уменьшить время выполнение функции?

Доброго дня, есть файл .xlsx на ~ 17mb и 92000 строк, нужно его конвертировать в .csv, функция (под спойлером) делает это уже 40 минут и пока еще не конец, где то за час управится, возможно потому, что я делаю это на стареньком ноуте с 8Gb памяти? На реальном сервере будет быстрее? Возможно сам код поправить нужно?

Функция
function bigExel2csv($filesXlsx)
{
	// Read the Excel file.
	$reader = ReaderEntityFactory::createXLSXReader();
	try {
		$reader->open('attach/' . $filesXlsx);
	} catch (IOException $e) {
	}

	foreach ($reader->getSheetIterator() as $sheet) {
		foreach ($sheet->getRowIterator() as $row) {
			// do stuff with the row
			$cells = $row->getCells();
		}
	}
    $info = pathinfo($filesXlsx);
	//$callStartTime = microtime(true);
	//$format = 'Y-m-d';
	// Export to CSV file.
	$writer = WriterEntityFactory::createCSVWriter();

	try {
		$writer->openToFile(safe_file("files/" . $info['filename'] . '.csv'));
	} catch (IOException $e) {
	}
	$writer->setFieldDelimiter(";");
	foreach ($reader->getSheetIterator() as $sheetIndex => $sheet) {
		//Add sheets in the new file, as we read new sheets in the existing one
		/* if ($sheetIndex !== 1) {
        $writer->addNewSheetAndMakeItCurrent();
    } */
		// Set delimiter.
		foreach ($sheet->getRowIterator() as $row) {
			// ... and copy each row into the new spreadsheet
			$writer->addRow($row);
		}
	}
}
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ответы на вопрос 1
@maksam07
$writer->addRow($row);
Есть функция добавления не строки, а массива строк и столбцов? Тогда вместо цикла можно было бы одной "итерацией" заполнить файл, это (скорее всего) могло бы существенно сократить время
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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