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

PHPExcel插入Logo至Excel下载文件报错:文件未找到求助

解决PHPExcel插入图片时"File not found"错误

问题描述

我尝试通过点击操作将Logo图片插入到Excel报告文件中,编写了以下代码:

$image= base_url('assets/images/mjobs_logo.png'); 
$objDrawing = new PHPExcel_Worksheet_Drawing(); 
$objDrawing->setName('Customer Signature'); 
$objDrawing->setDescription('Customer Signature'); 
$objDrawing->setPath($image); 
$objDrawing->setOffsetX(25); 
$objDrawing->setOffsetY(10); 
$objDrawing->setCoordinates($column.$cell); 
$objDrawing->setWidth(32); 
$objDrawing->setHeight(32); 
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); 

但运行代码时触发了如下错误:

An uncaught Exception was encountered 
Type: PHPExcel_Exception 
Message: File http://url/assets/images/mjobs_logo.png not found! 
Filename: /home/company/application/libraries/PHPExcel/Worksheet/Drawing.php 
Line Number: 111

问题根源

PHPExcel的PHPExcel_Worksheet_Drawing::setPath()方法不支持传入HTTP URL路径,它要求的是服务器本地的文件系统路径(绝对路径或相对于当前执行脚本的相对路径)。你当前用base_url()生成的是Web访问用的URL,并非服务器上的实际文件存储路径,所以PHPExcel无法定位到图片文件。

解决方案

把图片的URL替换为服务器本地的文件路径,如果你用的是CodeIgniter框架,可以借助框架内置的FCPATH常量(指向项目根目录,也就是前端控制器所在的目录)来构建路径:

修改后的完整代码

// 使用服务器本地文件路径,替代Web URL
$image = FCPATH . 'assets/images/mjobs_logo.png'; 
$objDrawing = new PHPExcel_Worksheet_Drawing(); 
$objDrawing->setName('Customer Signature'); 
$objDrawing->setDescription('Customer Signature'); 
$objDrawing->setPath($image); 
$objDrawing->setOffsetX(25); 
$objDrawing->setOffsetY(10); 
$objDrawing->setCoordinates($column.$cell); 
$objDrawing->setWidth(32); 
$objDrawing->setHeight(32); 
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet()); 

额外验证步骤

  • 先确认路径正确性:可以用file_exists()函数提前验证文件是否存在,避免报错:
    if (!file_exists($image)) {
        die("图片文件不存在,请检查路径:" . $image);
    }
    
  • 检查文件权限:确保服务器对assets/images/目录和mjobs_logo.png文件有读取权限,通常目录设置为755、文件设置为644即可。

内容的提问来源于stack exchange,提问作者Kiran Devkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:18:31