Я использую 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 $value . ' ';
echo ' ';
}
echo ' ';
}
echo '
';
die;
Я нашел некоторый код, который приближается, но кажется, что он не всегда точен, например, здесь пропущен второй рабочий лист в файле размером 27 МБ:
, а здесь он получил только третий рабочий лист и пропустил 3 других:
$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;