【问题标题】:PHPExcel: Set row height in pixelsPHPExcel:以像素为单位设置行高
【发布时间】:2015-01-20 10:23:53
【问题描述】:

我正在使用 PHPExcel 将一组图像写入使用 PHP 的 Excel 文件。 插入图像似乎不是问题,但是我在设置适当的行高以匹配图像高度时遇到了一些困难。

我设法使用pixelToCellDimension 来计算正确的列宽,但这似乎不适用于计算行高。 在检查了 PHPExcel_Shared_Drawing 类中的其余函数并谷歌搜索后,我对如何做到这一点感到目瞪口呆。

到目前为止我的代码:

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

【问题讨论】:

    标签: php phpexcel


    【解决方案1】:

    我使用pixelToPoints作为高度

    $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);
    

    版本 1.8.0

    【讨论】:

    • pixelsToPoints 已于 1.11.x 删除
    【解决方案2】:

    如果您不能使用Drawing::pixelToPoint() 方法,请使用以下计算:

    $image_height * 0.75
    

    这是将像素转换为点的公式(使用pixelToPoint方法)

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。如果可能,请在图片单元格中包含文本“\n”。例如,添加到单元格 5 次 "\n" => "\n\n\n\n\n" 以获得 100 像素的图像高度大小。

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

      但它不适用于合并单元格

      希望对你有帮助

      【讨论】:

      • 呵呵是的!但我没有找到任何其他解决方案,并且它有效:p
      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 2016-02-14
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多