2015-01-20 10 views
6

Ich benutze PHPExcel, um eine Reihe von Bildern in eine Excel-Datei mit PHP zu schreiben. Das Einfügen der Bilder scheint kein Problem zu sein, allerdings habe ich Schwierigkeiten, die passende Zeilenhöhe entsprechend der Bildhöhe einzustellen.PHPExcel: Zeilenhöhe in Pixel setzen

Ich habe PixelToCellDimension verwendet, um die richtige Spaltenbreite zu berechnen, aber dies scheint nicht zur Berechnung der Zeilenhöhe geeignet. Nach dem Auschecken der restlichen Funktionen in der PHPExcel_Shared_Drawing-Klasse und Googeln herum, bin ich sprachlos, wie dies zu tun ist.

Mein Code so weit:

// Create new PHPExcel object 
$objPHPExcel = new PHPExcel(); 

// Set document properties 
$objPHPExcel->getProperties()->setCreator("creator") 
    ->setLastModifiedBy("modifiedby") 
    ->setTitle("Title") 
    ->setSubject("Subject") 
    ->setDescription("Description") 
    ->setKeywords("keyword1 keyword2") 
    ->setCategory("category"); 

// Get default font 
$defaultFont = $objPHPExcel->getDefaultStyle()->getFont(); 

[einige Code, um meine Bilder zu erzeugen und ihre Pfade zu einem Array hinzufügen]

foreach($filePaths as $i => $filePath) { 
    $objDrawing = new PHPExcel_Worksheet_Drawing(); 
    $objDrawing->setWorkSheet($objPHPExcel->getActiveSheet()); 
    $objDrawing->setName("name"); 
    $objDrawing->setDescription("Description"); 
    $objDrawing->setPath($filePath); 

    $size = getimagesize($filePath); 
    $columnWidth = PHPExcel_Shared_Drawing::pixelsToCellDimension($size[0], $defaultFont); 
    $rowHeight = PHPExcel_Shared_Drawing::pixelsToCellDimension($size[1], $defaultFont); 

    $objDrawing->setCoordinates('A' . ($i+1)); 
    $objDrawing->setOffsetX(0); 
    $objDrawing->setOffsetY(0); 

    // set row/column (cell) sizes to match image size 
    $objPHPExcel->getActiveSheet() 
     ->getColumnDimension('A') 
     ->setWidth($columnWidth); 
    $objPHPExcel->getActiveSheet() 
     ->getRowDimension($i+1) 
     ->setRowHeight($rowHeight); 
} 

// Rename worksheet 
$objPHPExcel->getActiveSheet()->setTitle('Worksheet 1'); 

// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
$objPHPExcel->setActiveSheetIndex(0); 

// Redirect output to a client’s web browser (Excel5) 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="myMCS Scancode Export.xls"'); 
header('Cache-Control: max-age=0'); 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 
exit; 

Antwort

-1

ich hatte das gleiche Problem. Fügen Sie nach Möglichkeit den Text "\ n" in die Bildzelle ein. Fügen Sie z. B. 5 Mal "\ n" => "\ n \ n \ n \ n \ n" für eine Bildhöhengröße von 100px zur Zelle hinzu.

$objPHPExcel->getActiveSheet()->setCellValue($colLetter.$idLine, "\n\n\n\n\n"); 

Aber es funktioniert nicht mit Merges Zellen

Ich hoffe, es wird Ihnen helfen,

+0

was für eine schrecklich hacky Lösung – DevDonkey

+0

hehe ja! Aber ich habe keine andere Lösung gefunden, und es funktioniert: p – squaleXxi

1

I verwendet pixelsToPoints für die Höhe

$default_font = $spreadsheet->getDefaultStyle()->getFont(); 
$image_height = imageSY($image); 
$image_width = imageSX($image); 
$image_height_pt = Drawing::pixelsToPoints($image_height); 
$image_width_pt = Drawing::pixelsToCellDimension($image_width,$default_font); 

$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing(); 
$drawing->setImageResource($image); 
$drawing->setRenderingFunction(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::RENDERING_JPEG); 
$drawing->setMimeType(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_DEFAULT);  
$drawing->setCoordinates($col.$row); 
$drawing->setHeight($image_height); 
$drawing->setWorksheet($spreadsheet->getActiveSheet()); 
$spreadsheet->getActiveSheet()->getRowDimension($row)->setRowHeight($image_height_pt); 
$spreadsheet->getActiveSheet()->getColumnDimension($col)->setWidth($image_width_pt); 

Version 1.8.0