PHPExcel如何实现图片嵌入单元格而非悬浮并随单元格缩放?
首先明确:你当前用的PHPExcel(已停止官方维护7年以上)原生仅支持生成悬浮图片,没有内置单元格嵌入图片的能力,你提到的=DISPIMG是WPS表格专属的单元格图片函数,微软Excel不支持该语法。以下是两种可行的实现方案:
方案1:兼容微软Excel的图片随单元格缩放实现
不需要修改现有插入逻辑,仅需要追加2行配置,即可让浮动图片跟随单元格大小调整自动缩放:
$objDrawing = new \PHPExcel_Worksheet_Drawing(); $objDrawing->setPath($pat); $objDrawing->setWidthAndHeight(80, 80); $objDrawing->setOffsetX(7); $objDrawing->setOffsetY(7); $objDrawing->setRotation(0); $objDrawing->getShadow()->setVisible(true); $objDrawing->getShadow()->setDirection(50); $objDrawing->setCoordinates('A' . ($ki + 2)); // 追加以下两行配置 $objDrawing->setResizeProportional(false); // 关闭等比缩放约束,完全匹配单元格大小 $objDrawing->setResizeWithCells(true); // 开启随单元格调整大小 $objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); // 额外建议:同步调整对应行高、列宽匹配图片尺寸,避免图片压缩变形 $objPHPExcel->getActiveSheet()->getRowDimension($ki + 2)->setRowHeight(94); // 7*2偏移+80图片高度 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12); // 匹配80像素宽度
该方案生成的文件在微软Excel、WPS中都能正常打开,图片跟随单元格缩放,但依然是悬浮状态,不会显示=DISPIMG公式。
方案2:实现WPS专属的=DISPIMG嵌入单元格效果
如果仅需要在WPS环境下使用,建议先将PHPExcel替换为官方迭代的新版本PhpSpreadsheet,新版已内置支持WPS单元格嵌入图片特性,实现代码如下:
use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; $drawing = new Drawing(); $drawing->setPath($pat); $drawing->setWidthAndHeight(80, 80); $drawing->setOffsetX(7); $drawing->setOffsetY(7); // 核心配置:设置图片嵌入单元格 $drawing->setEmbedCell(true); $drawing->setCoordinates('A' . ($ki + 2)); $drawing->setWorksheet($spreadsheet->getActiveSheet()); // 调整单元格尺寸匹配显示 $spreadsheet->getActiveSheet()->getRowDimension($ki + 2)->setRowHeight(94); $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(12);
生成的文件在WPS中打开时,对应单元格会自动生成=DISPIMG格式的公式,图片完全嵌入单元格,可随单元格缩放、排序。
该方案生成的文件在微软Excel中打开时,公式会报错,图片无法正常显示。
内容的提问来源于stack exchange,提问作者Jason Ho
相关产品推荐
相关产品推荐

