You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:39:02