2015-01-20 3 views
6

Я использую PHPExcel для записи набора изображений в файл Excel с использованием PHP. Вставка изображений не кажется проблемой, однако у меня возникают трудности с установкой соответствующей высоты строки в соответствии с высотой изображения.PHPExcel: установить высоту строки в пикселях

Мне удалось использовать pixelsToCellDimension для вычисления правильной ширины столбца, но это не подходит для расчета высоты строки. После проверки остальных функций класса PHPExcel_Shared_Drawing и Googling, я остался ошарашенным, как это сделать.

Мой код до сих пор:

// 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(); 

[некоторый код для создания моих изображений и добавить их пути к массиву]

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; 

ответ

-1

У меня была такая же проблема. Если возможно, укажите текст «\ n» в ячейке изображения. Например, добавьте к ячейке 5 раз «\ n" => "\ n \ n \ n \ n \ n" для размера высоты изображения 100px.

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

Но это не работает с сливает клеток

Я надеюсь, что это поможет вам

+0

что ужасно хакерское решение – DevDonkey

+0

хе-хе да! Но я не нашел другого решения, и он работает: p – squaleXxi

1

Я использовал pixelsToPoints для высоты

$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

Смежные вопросы