Парсим Excel файл

bebeka

Новичок
Здравствуйте. Можно как-то на php забрать с файла Excel картинки ?
 

bebeka

Новичок
phpExcel , через него можно
Можно пример ? Если:

PHP:
for ($row = 1; $row <= $highestRow; ++ $row)
    {
        echo '<tr>';
        for ($col = 0; $col < $highestColumnIndex; ++ $col) 
        {
            $cell = $worksheet->getCellByColumnAndRow($col, $row);
            $val = $cell->getValue();
            $dataType = PHPExcel_Cell_DataType::dataTypeForValue($val);
            echo '<td>' . $val . '<br>(Тип ' . $dataType . ')</td>';
        }
        echo '</tr>';
    }
Выводится просто строка.
 

tz-lom

Продвинутый новичок
хмм,ну сам я с рисунками не работал, поэтому только наводки:
в $cell может быть PHPExcel_RichText , см его методы
ну и конечно $worksheet->getDrawingCollection() , там картинка точно есть,вопрос какую именно брать
вообще исходники библиотеки чуть менее чем полностью читабельны, можно просто наковырять как оно работает
 

bebeka

Новичок
хмм,ну сам я с рисунками не работал, поэтому только наводки:
в $cell может быть PHPExcel_RichText , см его методы
ну и конечно $worksheet->getDrawingCollection() , там картинка точно есть,вопрос какую именно брать
вообще исходники библиотеки чуть менее чем полностью читабельны, можно просто наковырять как оно работает
картинки все-равно не вышло забрать, массив выходит пустой...
 

bebeka

Новичок
Если кому-то нужно, все-таки все получилось:

PHP:
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load("27imagesexcel5.xlsx");

foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
	# Массив с изображениями
	$images = array();
	
	# Забираем информацию о изображениях
	foreach ($worksheet->getDrawingCollection() as $img) {
		# Открываем изображение
		$im = file_get_contents($img->getPath());
		# Забираем его с Excel и записываем в новый файл на сервере
		file_put_contents("./img/" . $img->getFilename(), $im);
		# Добавляем в массив информацию о новом изображении
		$images[$img->getCoordinates()] = $img->getFilename();
	}
	
	foreach ($worksheet->getRowIterator() as $row) {
		echo '    - Row number: ' . $row->getRowIndex() . "\r\n";

		$cellIterator = $row->getCellIterator();
		$cellIterator->setIterateOnlyExistingCells(false);
		
		foreach ($cellIterator as $cell) {
			if (!is_null($cell)) {
				$coordinate = $cell->getCoordinate();
				# Если есть в массиве изображение, то выводим его
				echo '        - Cell: ' . $coordinate . ' - ' . (isset($images[$coordinate]) ? $images[$coordinate] : $cell->getValue()) . "\r\n";
			}
		}
	}
}
 
Сверху