首页 游戏 软件 资讯 排行榜 专题
首页
编程语言
PHP教程 使用PhpSpreadsheet在Excel插入图片的完整代码

PHP教程 使用PhpSpreadsheet在Excel插入图片的完整代码

热心网友
46
转载
2026-05-07

用PHP和PhpSpreadsheet给Excel报表插上“图片”的翅膀

在后端开发中,生成带数据的Excel报表是家常便饭,但若想让报表图文并茂,直观地展示产品、课程或人员信息,就需要在单元格里精准地插入图片。今天,我们就来聊聊如何借助强大的PhpSpreadsheet库,让PHP轻松搞定这个需求。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

准备工作

万事开头先装包。通过Composer,一行命令就能把PhpSpreadsheet请到项目里来:

composer require phpoffice/phpspreadsheet

核心实现

1. 创建图片插入函数

function addImageToCell($worksheet, $imagePath, $cell, $name){
    $drawing = new Drawing();
    $drawing->setName($name);
    $drawing->setDescription($name);
    $drawing->setPath($imagePath);
    $drawing->setHeight(80);
    $drawing->setWidth(100);
    $drawing->setCoordinates($cell);
    $drawing->setOffsetX(5);
    $drawing->setOffsetY(5);
    $drawing->setWorksheet($worksheet);
}

这个函数是整个流程的“心脏”。它利用 PhpOffice\PhpSpreadsheet\Worksheet\Drawing 类,不仅把图片塞进指定单元格,还能精细控制尺寸、位置,甚至微调图片在单元格内的偏移量,确保视觉上的严丝合缝。

2. 准备数据

$header = ['课程名称', '图片'];
$list = [
    [
        'name' => 'thinkphp',
        'image' => 'images/thinkphp.png'
    ],
    [
        'name' => 'npm',
        'image' => 'images/npm.png'
    ],
    [
        'name' => 'uni-app',
        'image' => 'images/uni-app.jpg'
    ]
];

3. 创建Excel并填充数据

$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();

// 填充标题行
$worksheet->setCellValue('A1', $header[0]);
$worksheet->setCellValue('B1', $header[1]);
$worksheet->getColumnDimension('B')->setWidth(15);

$line = 1;
foreach ($list as $k => $v) {
    $line++;
    $worksheet->getRowDimension($line)->setRowHeight(100);
    $worksheet->getCell('A' . $line)->setValue($v['name']);
    addImageToCell($worksheet, $v['image'], 'B' . $line, $v['name']);
}

4. 保存文件

保存方式很灵活,可以根据场景二选一。

通过命令行生成文件: 执行 php index.php,一个实实在在的.xlsx文件就会出现在你的项目目录里。

$writer = new Xlsx($spreadsheet);
$filename = 'course_list.xlsx';
$writer->sa ve($filename);

通过Web端触发下载: 如果用内置服务器php -S 127.0.0.1:8888跑起来,访问该地址就会自动弹出下载。部署到Nginx等生产环境后,访问相应URL同样能直接下载文件。

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="course_list.xlsx"');
header('Cache-Control: max-age=0');

$writer = new Xlsx($spreadsheet);
$writer->sa ve('php://output');

关键要点

  • 核心在于用好 Drawing 类,它是操控图片插入的瑞士军刀。
  • 图片要放得好看,提前调整好行高和列宽是关键一步,不然图片可能显示不全。
  • 善用 setOffsetXsetOffsetY,能让图片在单元格中的位置更居中、更美观。
  • 一个老生常谈但至关重要的问题:务必确保代码中的图片路径正确,并且文件真实存在,否则一切都会功亏一篑。

实际效果

运行代码后,你将得到一个标准的两列表格:“课程名称”是清晰的文本,而“图片”列则整齐地排列着对应的课程Logo或缩略图。整个报表看起来专业又直观,视觉效果直接拉满。

这套方法简直是生成产品目录、带照片的员工花名册、图文课程列表等复合型报表的利器,既满足了数据导出的刚需,又兼顾了视觉呈现的体验。

完整代码

setName($name);
    $drawing->setDescription($name);
    $drawing->setPath($imagePath);
    $drawing->setHeight(80);
    $drawing->setWidth(100);
    $drawing->setCoordinates($cell);
    $drawing->setOffsetX(5);
    $drawing->setOffsetY(5);
    $drawing->setWorksheet($worksheet);
}

// 示例数据
$header = ['课程名称', '图片'];
$list = [
    [
        'name' => 'thinkphp',
        'image' => 'images/thinkphp.png'
    ],
    [
        'name' => 'npm',
        'image' => 'images/npm.png'
    ],
    [
        'name' => 'uni-app',
        'image' => 'images/uni-app.jpg'
    ]
];

$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();

// 填充标题行
$worksheet->setCellValue('A1', $header[0]);
$worksheet->setCellValue('B1', $header[1]);
$worksheet->getColumnDimension('B')->setWidth(15);
$line = 1;
foreach ($list as $k => $v) {
    $line++;
    $worksheet->getRowDimension($line)->setRowHeight(100);
    $worksheet->getCell('A' . $line)->setValue($v['name']);
    addImageToCell($worksheet, $v['image'], 'B' . $line, $v['name']);
}

// 保存为Excel文件
$writer = new Xlsx($spreadsheet);
$filename = 'course_list.xlsx';
$writer->sa ve($filename);

// 下载Excel文件
// header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// header('Content-Disposition: attachment;filename="course_list.xlsx"');
// header('Cache-Control: max-age=0');
// $writer = new Xlsx($spreadsheet);
// $writer->sa ve('php://output');
来源:https://www.jb51.net/program/35253606r.htm
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

MONIE价格下跌至0.0066美元 Infiblue销毁8000万代币推动通缩预期
web3.0
MONIE价格下跌至0.0066美元 Infiblue销毁8000万代币推动通缩预期

Infiblue World 销毁8000万枚MONIE:Web3项目如何通过通缩机制重建市场信任? 在Web3与区块链游戏领域,代币经济模型的健康度直接决定了项目的生命力。近期,知名区块链游戏生态系统Infiblue World完成了一项关键操作:于5月2日宣布,已成功销毁八千万枚其原生代币MON

热心网友
05.07
Riftbound玩家为何在Vex上线前就对她产生反感
游戏攻略
Riftbound玩家为何在Vex上线前就对她产生反感

距离《Riftbound》最新扩展系列《Unleashed》正式上线仅剩一天。经过一周的预发布期,以及在中国服务器长达一个月的实战检验,哪些新卡将成为环境霸主,玩家心中早已有了答案。 其中,一张名为“Vex, Apathetic”的4费紫色单位卡,因其过于强势的表现,甚至在正式上线前就引发了社区热议

热心网友
05.07
三国杀赵襄觉醒技能详解与实战培养攻略
游戏攻略
三国杀赵襄觉醒技能详解与实战培养攻略

在《三国杀:武将觉醒》中,武将“赵襄”的实战强度与玩法上限,与装备配置和体系构建深度绑定。这份深度培养攻略将为你解析赵襄的核心养成逻辑,提供从入门到精通的实战进阶思路。 三国杀武将觉醒赵襄全面培养攻略 一套契合的装备是赵襄立足战场的根本。游戏前期,【金兰剑】能有效补充伤害缺口;进入后期,追求爆发输出

热心网友
05.07
美证监会主席称加密货币法律框架亟待完善与监管明确
web3.0
美证监会主席称加密货币法律框架亟待完善与监管明确

SEC释放重磅信号:加密货币监管新框架呼之欲出 近日,美国证券交易委员会(SEC)主席保罗·阿特金斯在参议院听证会上的一番表态,在Web3与加密领域投下了一枚“震撼弹”。他明确指出,基于上世纪三十年代的传统证券法律框架,在监管日新月异的加密货币市场时已显“力不从心”。这强烈预示着,SEC或将启动一项

热心网友
05.07
Xbox Series主机全新开机动画将于5月13日正式更新
游戏资讯
Xbox Series主机全新开机动画将于5月13日正式更新

XboxSeriesX|S主机将于5月13日更新开机动画与音效,标志性Logo回归绿色且质感更佳。新任CEO夏尔马上任后推动多项品牌变革,包括更新功能、调整营销策略、下调订阅价格及更换管理层,旨在为Xbox注入新活力。

热心网友
05.07