Цитирование через рабочие листы с помощью PHPExcel
Я использую библиотеку 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";
?>
Ответы
Ответ 1
Вы используете итераторы. Вы посмотрели пример кода для итераторов в каталоге /Tests? Если это так, вы могли увидеть ссылку на WorksheetIterator
В качестве альтернативы метод getAllSheets() объекта PHPExcel возвращает массив рабочих листов, который позволяет использовать цикл foreach
Ответ 2
Я думаю, вы можете это сделать. Увеличьте активный лист до тех пор, пока он не останется слева, а затем сделайте то, что вы хотите, с каждым из них:
<?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++;
}
...
?>
Ответ 3
Здесь полезная функция, которую я использую для итерации по листам и возврата массива значений ячеек для каждого с заголовком листа в виде ключа массива:
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());
}
}