PHPExcel, как использовать данные из ридера - PullRequest
2 голосов
/ 12 августа 2011

Я пытаюсь понять, как получить данные из ячеек в PHPExcel, но понятия не имею. Я прочитал всю документацию и сделал это:

<?php
include('PHPExcel/Classes/PHPExcel/Reader/Excel2007.php');
class MyReadFilter implements PHPExcel_Reader_IReadFilter
{
    public function readCell($column, $row, $worksheetName = '') {
        // Read title row and rows 20 - 30
        if ($row == 1 || ($row >= 20 && $row <= 30)) {
            return true;
        }

        return false;
    }
}
$objReader = new PHPExcel_Reader_Excel2007();
$objReader->setReadFilter( new MyReadFilter() );
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("sample_mymails222.xlsx");
print_r($objPHPExcel);
?>

print_r показывает очень большой массив. Я думаю, что есть некоторые функции для получения данных из ячейки в $ objPHPExcel.

Как это сделать?

Thanx!

Ответы [ 3 ]

25 голосов
/ 28 сентября 2011

Для тех, кто хочет получить более полезный ответ, следуя коду в приведенном выше примере, приведен быстрый фрагмент, который будет анализировать активную рабочую таблицу в многомерный массив (в этом примере игнорируется ReadFilter, созданный OP).

$data =  array();
$worksheet = $objPHPExcel->getActiveSheet();
foreach ($worksheet->getRowIterator() as $row) {
  $cellIterator = $row->getCellIterator();
  $cellIterator->setIterateOnlyExistingCells(false);
  foreach ($cellIterator as $cell) {
    $data[$cell->getRow()][$cell->getColumn()] = $cell->getValue();
  }
}
var_dump($data);

КСТАТИ Причина, по которой я говорю «более полезный ответ», заключается в том, что мне также было трудно разобраться с документацией PHPExcel (которая состоит из 6 отдельных документов и без реальной ссылки, подобной API) в первый развокруг.

ОП говорит, что он "прочитал все документы", но я предполагаю, что, как и я, он прочитал файл с именем Документация пользователя PHPExcel - чтение файлов электронных таблиц.doc , в котором объясняется, какчитать в электронной таблице, но не охватывает использование содержимого.

Чтобы выяснить это, вы должны изучить документацию PHPExcel для разработчиков.doc и перейти к части 4 (котораягде я нашел пример выше).

Да, моя вина в том, что я не был внимательным, но, очевидно, это повторяющаяся проблема.: -)

3 голосов
/ 07 апреля 2015

для чтения файла Excel вы можете использовать это

require_once('PHPExcel.php');
$input_file_type = PHPExcel_IOFactory::identify($excel_file);
$obj_reader = PHPExcel_IOFactory::createReader($input_file_type);
$obj_reader->setReadDataOnly(true);
        
$objPHPExcel = $obj_reader->load($excel_file);
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
$highest_row = $objWorksheet->getHighestRow();
$highest_col = $objWorksheet->getHighestColumn();
//$highest_col_index = PHPExcel_Cell::columnIndexFromString($highest_col);
        
// start $row from 2, if you want to skip header
for ($counter = 2; $counter <= $highest_row; $counter++)
{
    $row = $objWorksheet->rangeToArray('A'.$counter.':'.$highest_col.$counter);
    $row = reset($row);            
}
2 голосов
/ 12 августа 2011

Пожалуйста, прочтите главу 4.5 документации (входит в пакет загрузки PHPExcel)

...