Я использую библиотеку PHPExcel для чтения файла Excel и выполнения обработки на нем. Я хочу прокрутить каждый лист. Я проверил документацию, и все, что я мог найти, это изменение активного индекса рабочего листа или загрузка только указанных рабочих листов. Как я могу просмотреть все листы?
Спасибо за любую помощь.
Вот пример цикла записи, для справки:
<?php $objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objReader->setReadDataOnly(true); $objPHPExcel = $objReader->load("test.xlsx"); $objWorksheet = $objPHPExcel->getActiveSheet(); echo '<table>' . "\n"; foreach ($objWorksheet->getRowIterator() as $row) { echo '<tr>' . "\n"; $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); // This loops all cells, // even if it is not set. // By default, only cells // that are set will be // iterated. foreach ($cellIterator as $cell) { echo '<td>' . $cell->getValue() . '</td>' . "\n"; } echo '</tr>' . "\n"; } echo '</table>' . "\n"; ?>
Вы используете итераторы. Вы посмотрели пример кода для итераторов в каталоге / Tests? Если это так, возможно, вы видели ссылку на WorksheetIterator
Кроме того, метод getAllSheets () объекта PHPExcel возвращает массив рабочих листов, который позволяет использовать цикл foreach
Я думаю, вы можете это сделать. Увеличьте активный лист до тех пор, пока его не осталось, а затем сделайте то, что вы хотите, с каждым из них:
<?php $objReader = PHPExcel_IOFactory::createReader('Excel2007'); $objReader->setReadDataOnly(true); $objPHPExcel = $objReader->load("test.xlsx"); $i = 0; while ($objPHPExcel->setActiveSheetIndex($i)){ $objWorksheet = $objPHPExcel->getActiveSheet(); //now do whatever you want with the active sheet ... $i++; } ... ?>
Вот полезная функция, которую я использую для итерации над листами и возврата массива значений ячеек для каждого с заголовком листа в виде ключа массива:
function getSheets($fileName) { try { $fileType = PHPExcel_IOFactory::identify($fileName); $objReader = PHPExcel_IOFactory::createReader($fileType); $objPHPExcel = $objReader->load($fileName); $sheets = []; foreach ($objPHPExcel->getAllSheets() as $sheet) { $sheets[$sheet->getTitle()] = $sheet->toArray(); } return $sheets; } catch (Exception $e) { die($e->getMessage()); } }