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

使用PHP从Excel(xls)单个单元格中提取图片的问题求助

错误原因分析

报错的核心是调用对象错误:getDrawingCollection()是工作表对象的方法,不能直接在单元格对象上调用,你之前的写法应该是先拿到了目标单元格再调用该方法,才会触发类方法不存在的错误。

实现方案

你需要遍历工作表的全部绘图对象,匹配目标单元格坐标即可拿到指定位置的图片和对应名称,示例代码如下:

// 获取活动工作表实例
$activeSheet = $objPHPExcel->getActiveSheet();
// 替换为你要提取的第一行目标单元格坐标,例如第一行B列就是'B1'
$targetCell = 'A1';
$matchedDrawings = [];

// 遍历所有绘图资源
foreach ($activeSheet->getDrawingCollection() as $drawing) {
    if ($drawing->getCoordinates() === $targetCell) {
        $matchedDrawings[] = $drawing;
    }
}

if (!empty($matchedDrawings)) {
    foreach ($matchedDrawings as $drawing) {
        // 获取图片名称
        $imageName = $drawing->getName();
        // 提取图片内容
        if ($drawing instanceof PHPExcel_Worksheet_Drawing) {
            // 本地路径嵌入的图片
            $imageContent = file_get_contents($drawing->getPath());
            $imageSuffix = $drawing->getExtension();
        } elseif ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) {
            // 剪贴板粘贴的内存图片
            ob_start();
            call_user_func(
                $drawing->getRenderingFunction(),
                $drawing->getImageResource()
            );
            $imageContent = ob_get_clean();
            $imageSuffix = $drawing->getMimeType() === 'image/png' ? 'png' : 'jpeg';
        }
        // 此处可自行处理拿到的图片名称、内容、后缀,存库或落地存储
    }
}
注意事项
  • 如果目标单元格内存在多张图片,上述代码会全部匹配存入$matchedDrawings数组,按需取用即可。
  • 目前PHPExcel已经停止维护,后续如果有更高版本Excel处理需求,建议替换为其迭代版本PhpSpreadsheet,API逻辑基本一致,兼容性更好。

内容的提问来源于stack exchange,提问作者Shivangi rawat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:06:03