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

    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');

    }

模板

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/922877.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++11】锋芒毕露

(续) 一、可变参数模板 C11支持可变参数模板,也就是说支持可变数量参数的函数模板和类模板,可变数目的参数被称 为参数包,存在两种参数包:模板参数包,表示零或多个模板参数;函数参数包:表示零…

用户管理(MySQL)

目录 1用户管理(MySQL) 1.1 用户 1.1.1 用户信息 1.1.2 创建用户(后%是可以任意远端登录) 1.1.3 刷新一下 1.1.4 删除用户 1.1.5 修改用户密码 1.2 数据库的权限 1.2.1 登录创建用户 1.2.2给权限 1.2.2.1 把jj数据库中uu表的权限给woaini这个…

Hive离线数仓结构分析

Hive离线数仓结构 首先,在数据源部分,包括源业务库、用户日志、爬虫数据和系统日志,这些都是数据的源头。这些数据通过Sqoop、DataX或 Flume 工具进行提取和导入操作。这些工具负责将不同来源的数据传输到基于 Hive 的离线数据仓库中。 在离线…

Linux——Uboot命令使用

什么是Uboot? 1)Uboot是一个裸机程序,比较复杂。类似我们PC机的BIOS程序。 2)Uboot就是一个bootloader,作用就是用于启动Linux或者其他系统,Uboot最主要的工作是初始化DDR,因为Linux的运行是运行…

Cannal实现MySQL主从同步环境搭建

大家好,我是袁庭新。 在多数情况下,客户端往往会优先获取缓存中的数据。然而,当缓存数据与数据库中的实际数据存在显著不一致时,可能会导致严重的后果。因此,确保数据库与缓存数据之间的一致性变得至关重要&#xff0c…

C++《二叉搜索树》

在初阶数据结构中我学习了树基础的概念以及了解了顺序结构的二叉树——堆和链式结构二叉树该如何实现,那么接下来我们将进一步的学习二叉树,在此会先后学习到二叉搜索树、AVL树、红黑树;通过这些的学习将让我们更易于理解后面set、map、哈希等…

C++ —— 以真我之名 如飞花般绚丽 - 智能指针

目录 1. RAII和智能指针的设计思路 2. C标准库智能指针的使用 2.1 auto_ptr 2.2 unique_ptr 2.3 简单模拟实现auto_ptr和unique_ptr的核心功能 2.4 shared_ptr 2.4.1 make_shared 2.5 weak_ptr 2.6 shared_ptr的缺陷:循环引用问题 3. shared_ptr 和 unique_…

springboot项目使用maven打包,第三方jar问题

springboot项目使用maven package打包为可执行jar后,第三方jar会被打包进去吗? 答案是肯定的。做了实验如下: 第三方jar的项目结构及jar包结构如下:(该第三方jar采用的是maven工程,打包为普通jar&#xf…

第六届智能控制、测量与信号处理国际学术会议 (ICMSP 2024)

重要信息 2024年11月29日-12月1日 中国陕西西安石油大学雁塔校区 大会官网:www.icmsp.net 大会简介 第六届智能控制、测量与信号处理国际学术会议(ICMSP 2024)由西安石油大学、中海油田服务股份有限公司、浙江水利水电学院与中国石油装备…

设计LRU缓存

LRU缓存 LRU缓存的实现思路LRU缓存的操作C11 STL实现LRU缓存自行设计双向链表 哈希表 LRU(Least Recently Used,最近最少使用)缓存是一种常见的缓存淘汰算法,其基本思想是:当缓存空间已满时,移除最近最少使…

跨平台应用开发框架(1)----Qt(组件篇)

目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…

Vue3+SpringBoot3+Sa-Token+Redis+mysql8通用权限系统

sa-token支持分布式token 前后端代码,地球号: bright12389

专题二十三_动态规划_回文串系列问题_算法专题详细总结

目录 动态规划 回文串系列问题 1. 回⽂⼦串(medium) 解析: 解决回文串问题,这里提供三个思路: 1.中心扩展法:n^2 / 1 2.马拉车算法:n / n 3.动态规划算法:n^2 / n^2 1.状态表…

ES实用面试题

一、es是什么,为什么要用它? ES通常是Elasticsearch的简称,它是一个基于Lucene构建的开源搜索引擎。Elasticsearch以其分布式、高扩展性和实时数据分析能力而闻名,广泛用于全文搜索、日志分析、实时监控等多种场景。 基本特点&am…

实现在两台宿主机下的docker container 中实现多机器通讯

基于我的实验背景 上位机:ubuntu 20.04 (docker humble 22.04) 下位机:ubuntu 22.04(docker noetic 20.04) 目标:实现在上位机中的docker container 容器的22.04环境去成功远程访问 非同网段的下位机的20.04的contai…

FakeLocation Linux | Windows关于使用教程一些规范说明

前言:使用教程(FakeLocation版本请使用1.2.xxx)| (1.3.xxx 未测试) 环境模块,是指代FakeLocation开启以后会把环境弄的异常,环境模块可以保证环境安全Dia 作为软件需要在Lsp框架里面勾选激活使用,并且开启增强模式FakeLocation 请…

指针的奥秘:深入探索内存的秘密

前言 在计算机编程的广阔天地中,指针作为一种独特的数据类型,它不仅是C语言的核心,也是理解计算机内存管理的基石。指针的概念虽然强大,但对于初学者来说,它常常是学习过程中的一个难点。本文旨在揭开指针的神秘面纱&a…

Mairadb 最大连接数、当前连接数 查询

目录 查询数据库 最大连接数 查询当前连接总数 环境 Mariadb 10.11.6 跳转mysql数据库: 查询数据库 最大连接数 show variables like max_connections; 注意; 这个版本不能使用 : show variables like ‘%max_connections%’; 会报错 &#xff…

电影风格城市夜景旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 电影风格城市夜景旅拍通过 Lightroom 调色,将城市夜晚的景色打造出如同电影画面般的质感和氛围。以独特的色彩和光影处理,展现出城市夜景的魅力与神秘。 预设信息 调色风格:电影风格预设适合类型:人像,街拍…

代码管理之Gitlab

文章目录 Git基础概述场景本地修改未提交,拉取远程代码修改提交本地,远程已有新提交 GitIDEA引入Git拉取仓库代码最后位置 Git基础 概述 workspace 工作区:本地电脑上看到的目录; repository 本地仓库:就是工作区中隐…