Есть ли способ получить имена рабочих листов из файлов Excel размером 20 МБ + с помощью PHPExcel?

Я использую PHPExcel для чтения данных из файлов Excel.

С помощью следующего кода я могу прочитать один конкретный рабочий лист файла Excel 3 МБ всего за пару секунд. Работает хорошо.

Однако теперь у меня есть 27 МБ и 88 МБ файлы Excel, из которых мне нужно получить данные. Они настолько велики, что даже OpenOffice не может их открыть.

Я обнаружил, что могу использовать порядковый номер вместо имени при загрузке листа, но это кажется непоследовательным, например, в одном конкретном файле Excel setLoadSheetsOnly (0) дал мне третий лист , а setLoadSheetsOnly (1) дал мне ошибку , хотя в файле было четыре листа. Так что по какой-то причине это кажется ненадежным .

Есть ли способ прочитать имена рабочих листов из большого файла, чтобы иметь доступ только к одному из его рабочих листов за раз?

        $objReader = PHPExcel_IOFactory::createReaderForFile("data/" . $file_name);
        $objReader->setLoadSheetsOnly(array($sheet_name));
        $objReader->setReadDataOnly(true);
        $objPHPExcel = $objReader->load("data/" . $file_name);

        echo '';
        for ($row = 1; $row < $number_of_rows; $row++) {
            echo '';
            for ($column = 0; $column < $number_of_columns; $column++) {
                $value = $objPHPExcel->setActiveSheetIndex(0)->getCellByColumnAndRow($column, $row)->getValue();
                echo '';
            }
            echo '';
        }
        echo '
'; echo $value . ' '; echo '
'; die;

] ДОБАВЛЕНИЕ:

Я нашел некоторый код, который приближается, но кажется, что он не всегда точен, например, здесь пропущен второй рабочий лист в файле размером 27 МБ:

alt text

, а здесь он получил только третий рабочий лист и пропустил 3 других:

alt text

$objReader = PHPExcel_IOFactory::createReaderForFile("data/" . $file_name);
$objReader->setLoadSheetsOnly(0);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("data/" . $file_name);

echo $objPHPExcel->getSheetCount(), ' worksheets
'; $loadedSheetNames = $objPHPExcel->getSheetNames(); foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) { echo $sheetIndex, ' -> ', $loadedSheetName, '
'; } die;

5
задан pnuts 4 September 2015 в 03:45
поделиться