Ответы пользователя по тегу PHP
  • Как сгруппировать строки c картинками в excel средствами PHP?

    @ligaliga
    SilverSlice Спасибо за наводку! Не много скорректировал PHPExcel и все получилось, но при условии что картинка в пределах одной ячейки (мне нужно было для прайс-листа). Если картинка вылазит за пределы этой ячейки нужно будет еще думать.

    В PHPExcel есть метод setResizeProportional, но он вообще ни где не задействован в PHPExcel/Writer/Excel2007/Drawing.php @version 1.7.9.

    Добавил корректировки в функцию public function _writeDrawing у меня это 172 строчка:

    Было :
    $objWriter->startElement('xdr:oneCellAnchor');

    Стало:

    $aResizeProportional = $pDrawing->getResizeProportional();
    
    			if ($aResizeProportional) {
    				$objWriter->startElement('xdr:twoCellAnchor');
    			}
    			else {
    				$objWriter->startElement('xdr:oneCellAnchor');
    			}


    И еще одна правка чуть ниже

    Было :
    // xdr:ext
    					$objWriter->startElement('xdr:ext');
    						$objWriter->writeAttribute('cx', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getWidth()));
    						$objWriter->writeAttribute('cy', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getHeight()));
    					$objWriter->endElement();


    Стало

    if ($aResizeProportional) {
    					$objWriter->startElement('xdr:to');
    						$objWriter->writeElement('xdr:col', $aCoordinates[0] - 1);
    						$objWriter->writeElement('xdr:colOff', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetX()) + PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getWidth()));
    						$objWriter->writeElement('xdr:row', $aCoordinates[1] - 1);
    						$objWriter->writeElement('xdr:rowOff', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getOffsetY()) + PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getHeight()));
    					$objWriter->endElement();
    				} else {
    					// xdr:ext
    					$objWriter->startElement('xdr:ext');
    						$objWriter->writeAttribute('cx', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getWidth()));
    						$objWriter->writeAttribute('cy', PHPExcel_Shared_Drawing::pixelsToEMU($pDrawing->getHeight()));
    					$objWriter->endElement();
                    }


    Когда создаем объект добавляем это:

    $objDrawing->setWidth($width);
    $objDrawing->setHeight($height);
    $objDrawing->setResizeProportional(true); 
    $objDrawing->setWidthAndHeight($width,$height);
    Ответ написан
    1 комментарий