php 导出excel 一个单元格 多张图片

embedded/2024/11/26 12:52:04/
php">    public function dumpData(){error_reporting(0); // 禁止错误信息输出ini_set('display_errors', 0); // 不显示错误$limit  = $this->request->post('limit', 20, 'intval');$offset = $this->request->post('offset', 0, 'intval');$page   = floor($offset / $limit) +1 ;$where = [];$name = trim($this->request->param('product_type_name'));$product_type_id = $this->request->param('product_type_id');$brand_ids = $this->request->param('brand_ids');if ($name != ''){$where[] = ['product_type.l_name_zh',"LIKE","%{$name}%"];}$brand_ids && $where[] = ['category.brand_ids',"in",$brand_ids];if (!empty($product_type_id)){$product_type_ids = $this->model->getChildIds($product_type_id);if (empty($product_type_ids)) $product_type_ids = [-9999];$where[] = ['product_type.product_type_id',"in",$product_type_ids];}$field = ['category.category_carousel_id','category.product_type_id','category.description','category.create_time','category.update_time','category.create_user_id','category.update_user_id','category.category_carousel_id',];$orderby = 'category_carousel_id desc';$res = CategoryCarouselService::indexList(formatWhere($where),$field,$orderby,$limit,$page);$list = $res['rows'];$img_count = array_column($list, 'img_list');$img_count_list = [];foreach ($img_count as $v){$img_count_list[] = count($v);}rsort($img_count_list);$max_img_count = $img_count_list[0] ?? 100;//开始写入EXCEL$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load(root_path() . 'public/tpl/分类优势导出模板.xls');//读取指定路径下的模板$worksheet = $spreadsheet->getActiveSheet();//指向激活的工作表$worksheet->setTitle('Product catalog');$count=count($list);$worksheet->insertNewRowBefore(3,$count-1);$worksheet->getColumnDimension('E')->setWidth($max_img_count * 20);$startline=2;//遍历表单数据$path = root_path() . 'public/tmpxls/category/';@mkdir($path);$arr=['序号','产品总类','产品大类','产品小类','图片列表','产品小类优势','创建时间','更新时间','创建人','更新人'];foreach($list as $k=>$v){// 基础偏移量$offsetX = 10;$offsetY = 10;foreach ($v['img_list'] as $index => $img_list){$img_url = $img_list['file_path_text'] ?? '';if ($img_url == '') continue;$line=$k+$startline;$fileInfo = pathinfo($img_url);$file =  $fileInfo['filename'] .'.'.$fileInfo['extension'];//下载图片到本地if (file_exists( $path.$file) === false) {copy($img_url, $path.$file);}if (!file_exists($path.$file)) {// 跳过无效图片continue;}//下载图片到本地if(file_exists($path.$file)===true){$drawing =new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();$drawing->setName('Image ' . ($index + 1));$drawing->setDescription('Image ' . ($index + 1));$drawing->setPath($path.$file); // 设置图片路径$drawing->setWidth(80); // 设置图片宽度$drawing->setHeight(80); // 设置图片高度$drawing->setCoordinates('E'.$line); // 指定单元格$drawing->setOffsetX($offsetX); // 设置横向偏移$drawing->setOffsetY($offsetY); // 设置纵向偏移$drawing->setWorksheet($spreadsheet->getActiveSheet());// 调整偏移量,确保图片不重叠$offsetX += 90; // 每张图片向右偏移 50 像素}}//插入行项目$worksheet->getCell('A'.$line)->setValue(++$k);$worksheet->getCell('B'.$line)->setValue($v['first_level_name']);$worksheet->getCell('C'.$line)->setValue($v['second_level_name']);$worksheet->getCell('D'.$line)->setValue($v['third_level_name']);$worksheet->getCell('F'.$line)->setValue($v['description']);$worksheet->getCell('G'.$line)->setValue($v['create_time']);$worksheet->getCell('H'.$line)->setValue($v['update_time']);$worksheet->getCell('I'.$line)->setValue($v['create_user_text']);$worksheet->getCell('J'.$line)->setValue($v['update_user_text']);}$filename = date("YmdHis").'分类优势';//下载文档header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename='.$filename.'.Xlsx');header('Cache-Control: max-age=0');$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);return $writer->save('php://output');}

模板

在这里插入图片描述


http://www.ppmy.cn/embedded/140625.html

相关文章

web开发中浏览器的重排与重绘

重排(Reflow) 和 重绘(Repaint) 是浏览器在渲染网页时涉及的两个重要过程,它们直接影响网页性能。理解它们的区别和优化方法对于前端开发至关重要。 1. 重排(Reflow) 定义 重排是指当网页布局…

2024 年第十七届山东省职业院校技能大赛 高职组“信息安全管理与评估”比赛通知

第十七届山东省职业院校技能大赛 高职组“信息安全管理与评估”比赛通知 2024 年山东省职业院校技能大赛高职组“信息安全管理与评估 ” 比赛定 于 12 月 18—20 日在烟台职业学院举行。 一、比赛相关安排 1.报到时间地点 各参赛队 12 月 18 日 14:00 前报到,地点&a…

HTTP工作原理

HTTP协议工作于客户端/服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 首先客户端与服务器需要建立连接。只要单击某个超链接,HTTP就开始工作。 建立连接后,客户端发送一个请求给服务器,请求方式的格式为&…

【freertos】FreeRTOS消息队列的介绍与使用

FreeRTOS消息队列的介绍与使用 一、概述二、消息队列的运作机制三、API函数1、消息队列创建函数2、消息队列静态创建函数3、用于向队列尾部发送一个队列消息4、在中断服务程序中用于向队列尾部发送一个消息5、向队列队首发送一个消息6、在中断服务程序中向消息队列队首发送一个…

Easyexcel(5-自定义列宽)

相关文章链接 Easyexcel(1-注解使用)Easyexcel(2-文件读取)Easyexcel(3-文件导出)Easyexcel(4-模板文件)Easyexcel(5-自定义列宽) 注解 ColumnWidth Data…

FileLink内外网文件共享系统与FTP对比:高效、安全的文件传输新选择

随着信息技术的不断进步,文件传输和共享已经成为企业日常工作中不可或缺的一部分。传统的FTP(File Transfer Protocol)协议在一定程度上为文件共享提供了便利,但随着企业对文件传输的需求越来越复杂,FileLink内外网文件…

可视化建模与UML《状态图实验报告》

其实我并不是一个实验报告博主。 大家收拾收拾准备期末复习了嗷,差不多了,不想太赶可以开始准备了。 一、实验目的: 1、熟悉状态图的基本功能和使用方法。 2、掌握使用建模工具软件绘制状态图的方法 二、实验环境: window7 | 10…

【C++11】可变参数模板/新的类功能/lambda/包装器--C++

文章目录 一、可变参数模板1、基本语法及原理2、包扩展3、empalce系列接口 二、新的类功能1、默认的移动构造和移动赋值2、成员变量声明时给缺省值3、defult和delete4、final与override 三、STL中一些变化四、lambda1、lambda表达式语法2、捕捉列表3、lambda的应用4、lambda的原…