2015-01-20 15 views
6

Tôi đang sử dụng PHPExcel để viết một tập hợp các hình ảnh vào một tệp Excel bằng cách sử dụng PHP. Chèn hình ảnh dường như không phải là vấn đề, tuy nhiên tôi đang gặp một số khó khăn khi đặt chiều cao hàng phù hợp để phù hợp với chiều cao hình ảnh.PHPExcel: Đặt chiều cao hàng bằng pixel

Tôi đã quản lý để sử dụng pixelToCellDimension để tính chiều rộng cột chính xác, nhưng điều này dường như không thích hợp để tính chiều cao hàng. Sau khi kiểm tra các phần còn lại của các hàm trong lớp PHPExcel_Shared_Drawing và Googling xung quanh, tôi bị bỏ lại dumbfounded như thế nào để làm điều này.

Mã của tôi cho đến nay:

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

[một số mã để tạo ra hình ảnh của tôi và thêm các đường dẫn họ đến một mảng]

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; 

Trả lời

-1

tôi đã cùng một vấn đề. Nếu có thể, hãy đưa văn bản "\ n" vào ô hình ảnh. Ví dụ: thêm vào ô 5 lần "\ n" => "\ n \ n \ n \ n \ n" cho kích thước chiều cao hình ảnh 100px.

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

Nhưng nó không làm việc với các tế bào hòa trộn

Tôi hy vọng nó sẽ giúp bạn

+0

những gì một giải pháp khủng khiếp hacky – DevDonkey

+0

hehe có! Nhưng tôi đã không tìm thấy bất kỳ giải pháp khác, và nó hoạt động: p – squaleXxi

1

tôi đã sử dụng pixelsToPoints cho chiều cao

$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

Các vấn đề liên quan