нельзя использовать объект как массив в PHP? - PullRequest
1 голос
/ 05 апреля 2011

Я пытаюсь прочитать данные из Excel по этому коду

$row['name']     =    $objPHPExcel->getActiveSheet()->getCellByColumnAndRow(3, $l)->getCalculatedValue(); 

var_dump возвращает строку (4) "CCC3"

, но у меня странная проблема

код

$row['name']     =

возвращает Невозможно использовать объект типа PHPExcel_Worksheet_Row в качестве массива Если я использую простой

$row_name = 

все нормально ....

для чтения данных Im с использованием phpExcel.

Конечно, я могу изменить его на второй вариант, но я не знаю, почему он не работает

спасибо за помощь

Ответы [ 3 ]

2 голосов
/ 16 апреля 2012

Я делал ту же ошибку. Я просто исправил ошибку, переименовав $row в другую переменную.

Вот что я сделал:

$objReader = PHPExcel_IOFactory::createReaderForFile(ABSPATH.$row['file_path']);
$objReader->setReadDataOnly(true);
$objReader->setReadFilter( new MyReadFilter() );
$objPHPExcel = $objReader->load(ABSPATH.$row['file_path']);

$objPHPExcel = PHPExcel_IOFactory::load(ABSPATH.$row['file_path']);
$objWorksheet = $objPHPExcel->getActiveSheet();

foreach ($objWorksheet->getRowIterator() as $rowsheet) {
    $cellIterator = $rowsheet->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false); 
    foreach ($cellIterator as $cell) {
        $headarray[]= $cell->getValue();
    }
}

Обратите внимание, что я изменился

foreach ($objWorksheet->getRowIterator() as $row) {
                      $cellIterator = $row->getCellIterator();
}

до

foreach ($objWorksheet->getRowIterator() as $rowsheet) {
                      $cellIterator = $rowsheet->getCellIterator();
}

и он работает как шарм.

1 голос
/ 05 апреля 2011

$row является объектом, поэтому вы не можете установить свойства таким образом, если он не реализует ArrayAccess. Ваш вопрос заставляет меня думать, что $row - это просто неиспользуемая переменная на тот момент, и в этом случае вы можете unset это и / или сделать ее массивом как $row = array();.

0 голосов
/ 05 апреля 2011

Вы уже установили значение $row как объект PHPExcel_Worksheet_Row ранее в своем скрипте, возможно, используя итератор строк PHPExcel, поэтому $row уже существует как объект.Это означает, что вы не можете просто полагаться на PHP, чтобы переопределить его как ассоциативный массив, когда вы присваиваете ему значение как $row['name'].

. Или используйте другое имя переменной (например, $ rowdata), которое не имеетпредыдущий использовался, или unset($row); перед попыткой присвоить ему значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...