当前位置: 首页 > news >正文

PhpSpreadsheet导出图片

PhpSpreadsheet导出图片

    //导出public function pdf($ids){$jzInfo = $this->model->where('id',$ids)->find();try {//巡检人员$staff_ids = \app\admin\model\inspection\Plan::where('id',$jzInfo['plan_id'])->value('staff_id');$staff_names = \app\admin\model\inspection\Staff::whereIn('id',$staff_ids)->column('staff_name');$staff_names = implode(',',$staff_names);$salf_ids = \app\admin\model\inspection\Plan::where('id',$jzInfo['plan_id'])->value('salf_id');$salf_names = \app\admin\model\inspection\Staff::where('id',$salf_ids)->value('staff_name');$spreadsheet = new Spreadsheet();$worksheet = $spreadsheet->getActiveSheet();//设置工作表标题名称$worksheet->setTitle('电梯托管日常巡检');//表头//设置单元格内容setCellValueByColumnAndRow(列,行)$worksheet->setCellValueByColumnAndRow(1, 1, '海康智慧城市科技(广东)有限公司电梯托管日常巡检表');//合并单元格$worksheet->mergeCells('A1:B1');$worksheet->setCellValueByColumnAndRow(1, 5, '巡检内容');$worksheet->setCellValueByColumnAndRow(2, 5, ' 巡检结果');$styleBorderArray = ['borders' => ['outline' => ['borderStyle' => Border::BORDER_THIN, // 边框样式'color' => ['argb' => '0000000'], // 边框颜色],],];$styleArray = ['font' => ['bold' => true],'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,],'borders' => ['outline' => ['borderStyle' => Border::BORDER_THIN, // 边框样式'color' => ['argb' => '0000000'], // 边框颜色],],];//设置单元格样式$worksheet->getStyle('A1:B1')->applyFromArray($styleArray)->getFont()->setSize(16);$worksheet->getStyle('A5')->applyFromArray($styleBorderArray);$worksheet->getStyle('B5')->applyFromArray($styleBorderArray);$list = \app\admin\model\inspection\ProjectSite::alias("project_site")->field("project_site.*,inspection_area.area_name,inspection_area_site.site_name")->join("inspection_area","project_site.area_id=inspection_area.id")->join("inspection_area_site","project_site.area_site_id=inspection_area_site.id")->where('project_site.id',$ids)->select();$list_num = count($list);$change_num = 5+$list_num;$j = 6;for ($i=0; $i < $list_num; $i++) {//$j = $i + 4; //从表格第4行开始$val = $list[$i];$list_item = \app\admin\model\inspection\Projectitem::where('project_site_id','=',$val->id)->select();$item_count = count($list_item);if(empty($item_count)){continue;}//foreach($list_item as $v_item){$coummunit_id = $val['area_id'];for ($it=0; $it < $item_count; $it++) {$num = $j+$it;$worksheet->setCellValueByColumnAndRow(1, $num, $list_item[$it]['item_name']);$worksheet->setCellValueByColumnAndRow(2, $num, $list_item[$it]['value']==2?"正常":($list_item[$it]['value']==1?"异常":$list_item[$it]['value']));$worksheet->getStyle('A'.$num)->applyFromArray($styleBorderArray);$worksheet->getStyle('B'.$num)->applyFromArray($styleBorderArray);}$change_num +=$item_count;}$coumunity_name = \app\admin\model\Community::where('id',$list[0]['area_id'])->find();$worksheet->setCellValueByColumnAndRow(1, 2, "项目地点 : ".$coumunity_name['name']);$worksheet->mergeCells('A2:B2');$worksheet->getStyle('A2:B2')->applyFromArray($styleBorderArray);$worksheet->setCellValueByColumnAndRow(1, 3, '巡检时间 : '.date("Y-m-d H:i:s",$list[0]['checktime']));$worksheet->mergeCells('A3:B3');$worksheet->getStyle('A3:B3')->applyFromArray($styleBorderArray);$worksheet->setCellValueByColumnAndRow(1, 4, '设备注册代码 : '.$coumunity_name['device_code']);$worksheet->mergeCells('A4:B4');$worksheet->getStyle('A4:B4')->applyFromArray($styleBorderArray);$worksheet->getColumnDimension('A')->setWidth(60);$worksheet->getColumnDimension('B')->setWidth(20);$worksheet->setCellValueByColumnAndRow(1, $change_num, "安全管理员 : ".(isset($staff_names)? $staff_names:''));$worksheet->setCellValueByColumnAndRow(2, $change_num, "安全总监 : ".(isset($salf_names)? $salf_names:''));$worksheet->getStyle('A'.$change_num)->applyFromArray($styleBorderArray);$worksheet->getStyle('B'.$change_num)->applyFromArray($styleBorderArray);//清洁项目$worksheet->setCellValueByColumnAndRow(1, 96, '海康智慧城市科技(广东)有限公司电梯托管清洁记录表');$worksheet->getStyle('A96:B96')->applyFromArray($styleArray)->getFont()->setSize(16);//合并单元格$worksheet->mergeCells('A96:B96');$worksheet->getStyle('A2:B2')->applyFromArray($styleBorderArray);$worksheet->setCellValueByColumnAndRow(1, 97, "项目地点 : ".$coumunity_name['name']);$worksheet->mergeCells('A97:B97');$worksheet->getStyle('A97:B97')->applyFromArray($styleBorderArray);//$completetime = \app\admin\model\inspection\Project::where('id',$jzInfo['project_id'])->value('completetime');$worksheet->setCellValueByColumnAndRow(1, 98, '清洁时间 : '.date("Y-m-d H:i:s",$list[0]['checktime']));$worksheet->mergeCells('A98:B98');$worksheet->getStyle('A98:B98')->applyFromArray($styleBorderArray);$worksheet->setCellValueByColumnAndRow(1, 99, '设备注册代码 : '.$coumunity_name['device_code']);$worksheet->mergeCells('A99:B99');$worksheet->getStyle('A99:B99')->applyFromArray($styleBorderArray);$worksheet->setCellValueByColumnAndRow(1, 100, '清洁内容');$worksheet->setCellValueByColumnAndRow(2, 100, ' 清洁结果');$worksheet->getStyle('A100')->applyFromArray($styleBorderArray);$worksheet->getStyle('B100')->applyFromArray($styleBorderArray);$change_nums = 100+$list_num;$j = 101;for ($i=0; $i < $list_num; $i++) {//$j = $i + 4; //从表格第4行开始$val = $list[$i];$list_item = \app\admin\model\inspection\Projectclear::where('project_site_id','=',$val->id)->select();$item_count = count($list_item);if(empty($item_count)){continue;}$coummunit_id = $val['area_id'];for ($it=0; $it < $item_count; $it++) {$num = $j+$it;$worksheet->setCellValueByColumnAndRow(1, $num, $list_item[$it]['item_name']);$worksheet->setCellValueByColumnAndRow(2, $num, $list_item[$it]['value']==2?"正常":($list_item[$it]['value']==1?"异常":$list_item[$it]['value']));$worksheet->getStyle('A'.$num)->applyFromArray($styleBorderArray);$worksheet->getStyle('B'.$num)->applyFromArray($styleBorderArray);}$change_nums +=$item_count;}//盖章$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();$drawing->setPath("./excel/xun.png");$drawing->setWidth(80);$drawing->setCoordinates('B'.$change_num/2);$drawing->setWorksheet($worksheet);//七牛图片下载$config = get_addon_config('qiniu');$bucket = $config['bucket'];$auth = new Auth($config['accessKey'], $config['secretKey']);$images = explode(',',$jzInfo['images']);$change_num = $change_num +1;$worksheet->setCellValueByColumnAndRow(1, $change_num, '巡检图片');$worksheet->mergeCells('A'.$change_num.':B'.$change_num);$styleArray = ['font' => ['bold' => true],'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,],];$worksheet->getStyle('A'.$change_num.':B'.$change_num)->applyFromArray($styleArray)->getFont()->setSize(16);//巡检图片导出到excelforeach($images as $key => $imageUrl){++$change_num;$worksheet->getRowDimension($change_num)->setRowHeight(70);//合并单元格// $worksheet->mergeCells('A'.$change_num.':B'.$change_num);// $worksheet->setHeight(300);$imageSavePath = './excel/image'.$key.'.jpg';// 下载图片到本地$imageUrl = $auth->privateDownloadUrl($imageUrl);file_put_contents($imageSavePath, file_get_contents($imageUrl));$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();$drawing->setResizeProportional(false);$drawing->setPath($imageSavePath);$drawing->setHeight(70);$drawing->setWidth(60);// $drawing->setOffsetX(12);// $drawing->setOffsetY(12);$drawing->setCoordinates('A'.$change_num);$drawing->setWorksheet($worksheet);//$change_num += 40;// 最后删除本地图片//unlink($imageSavePath);}$filename = $coumunity_name['name'].'电梯托管日常巡检表.xlsx';header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');header('Content-Disposition: attachment;filename="'.$filename.'"');header('Cache-Control: max-age=0');// 保存Excel文件$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');$writer->save('php://output');} catch (Exception $e) {dump($e->getMessage());}}

相关文章:

PhpSpreadsheet导出图片

PhpSpreadsheet导出图片 //导出public function pdf($ids){$jzInfo $this->model->where(id,$ids)->find();try {//巡检人员$staff_ids \app\admin\model\inspection\Plan::where(id,$jzInfo[plan_id])->value(staff_id);$staff_names \app\admin\model\inspect…...

AI 提示词(Prompt)入门 十:最佳实践|详细询问,提供细节!

1、原则解释 当与 ChatGPT 交流时&#xff0c;提供具体和详细的信息非常重要。 这样做可以帮助 ChatGPT 更准确地理解你的需求和上下文&#xff0c;从而生成更相关和有用的回答 明确的信息可以包括具体的问题背景、相关领域的说明、你所期望的答案类型等。 2、如何实践 明…...

web应用安全和信息泄露预防

文章目录 1&#xff1a;spring actuator导致的信息泄露1.1、Endpoint配置启用检测1.2、信息泄露复现1.3、防御 2&#xff1a;服务端口的合理使用3&#xff1a;弱口令&#xff08;密码&#xff09;管理4&#xff1a;服务端攻击4.1、短信业务&#xff0c;文件上传等资源型接口1、…...

《人工智能深度学习的基本路线图》

《人工智能深度学习的基本路线图》 基础准备阶段 数学基础&#xff1a; 线性代数&#xff1a;深度学习中大量涉及矩阵运算、向量空间等概念&#xff0c;线性代数是理解和处理这些的基础。例如&#xff0c;神经网络中的权重矩阵、输入向量的运算等都依赖于线性代数知识。学习内容…...

基于Java Springboot宠物猫售卖管理系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&#xff1a;…...

力扣-Hot100-链表其三【算法学习day.36】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…...

iOS逆向入门:使用theos注入第三方依赖库

背景 theos是一个跨平台的软件开发框架&#xff0c;常用于管理&#xff0c;开发和部署iOS项目&#xff0c;同时也是开发iOS越狱插件的主要工具。和MonkeyDev不同的是&#xff0c;它不依赖于xcode&#xff0c;可以在多个操作系统上运行。一个完整的iOS越狱开发流程包括&#xf…...

JavaScript 原型

JavaScript 的原型&#xff08;Prototype&#xff09;是其面向对象编程模型的核心概念之一&#xff0c;它决定了对象如何继承属性和方法。通过理解 JavaScript 的原型&#xff0c;你可以更好地理解对象之间的关系以及如何扩展对象功能。 核心概念 [[Prototype]]&#xff08;内部…...

力扣 LeetCode 20. 有效的括号(Day5:栈与队列)

解题思路&#xff1a; 使用栈 只有三种情况 1. ( [ { } ] ( ( 左括号多了 -> 最后栈中经过抵消会剩下括号 2. [ { ( ] } ] 括号不匹配 -> return false 3. [ { } ] ( ) ) ) 右括号多了 -> 未遍历完时&#xff0c;栈提前为空&#xff0c;…...

git使用及上线流程(仅为我工作中常用)

推荐软件或者直接终端 ⚠️注意&#xff1a;在确保远程和本地分支都可使用的情况下 git常见使用命令 ls---查看所有目录 pwd---本机密码 cd 目录名---进入目录 Touch ---创建文本文件 git status---查看状态 git branch---查看分支 git pull---拉取远程最新代码 git checkou…...

React Native 全栈开发实战班 - 打包发布之热更新

在完成 React Native 应用的开发与性能优化后&#xff0c;下一步就是将应用打包并发布到各大应用市场&#xff0c;如 Apple App Store 和 Google Play Store。本章节已经详细介绍了打包与发布的流程&#xff0c;包括 Android 和 iOS 平台的配置、打包步骤、签名配置以及发布到应…...

2024年11月16日 星期六 重新整理Go技术

今日格言 坚持每天进步一点点~ 一个人也可以是一个团队~ 学习全栈开发, 做自己喜欢的产品~~ 简介 大家好, 我是张大鹏, 今天是2024年11月16日星期六, 很高兴在这里给大家分享技术. 今天又是休息的一天, 做了很多的思考, 整理了自己掌握的技术, 比如Java, Python, Golang,…...

力扣第 55 题 跳跃游戏

力扣第 55 题 跳跃游戏&#xff08;Jump Game&#xff09;。题目要求判断一个非负整数数组中&#xff0c;是否能够从第一个位置跳跃到最后一个位置。每个元素表示从当前位置最多可以跳跃的步数。 解题思路 我们可以用 贪心算法 来解决这个问题。贪心的核心思想是始终维护当前…...

Golang | Leetcode Golang题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; func nearestPalindromic(n string) string {m : len(n)candidates : []int{int(math.Pow10(m-1)) - 1, int(math.Pow10(m)) 1}selfPrefix, _ : strconv.Atoi(n[:(m1)/2])for _, x : range []int{selfPrefix - 1, selfPrefix, selfPrefix …...

Spring Boot汽车资讯:科技与速度的交响

3系统分析 3.1可行性分析 通过对本汽车资讯网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本汽车资讯网站采用SSM框架&#xff0c;JAVA作为开发语言&#…...

从 IDC 到云原生:稳定性提升 100%,成本下降 50%,热联集团的数字化转型与未来展望

作者&#xff1a;金峰&#xff08;项良&#xff09;、朱永林、赵世振&#xff08;寰奕&#xff09; 公司简介 杭州热联集团股份有限公司成立于 1997 年 10 月&#xff0c;是隶属杭州市实业投资集团的国有控股公司。公司专业从事国际、国内钢铁贸易黑色大宗商品及产业服务&…...

移动零

移动零 1、题目描述2、解答思路 1、题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 2、解答思路 已知数组后端若干元素为0&…...

C#编写的日志记录组件 - 开源研究系列文章

以前编写过一个日志记录组件的博文&#xff0c;这次发布一个修改过的完善版本。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 实现&#xff1b; 2) 使用&#xff1b; 后面的参数为级别设置&#xff0c;只有大于这个级别的才进行日志记录&#xff0c;限制了日志记录的…...

猎板PCB罗杰斯板材的应用案例

以下是几个猎板 PCB 与罗杰斯板材结合的具体案例&#xff1a; 案例一&#xff1a;5G 通信基站天线 PCB 在 5G 通信基站的天线系统中&#xff0c;对高频信号的传输和处理要求极高。猎板 PCB 采用罗杰斯板材&#xff0c;凭借其稳定的低介电常数&#xff08;如 RO4003C 板材&…...

使用esp32c3开发板通过wifi连网络web服务器

实验基本拓扑就是&#xff1a; esp32c3开发板通过Wifi模块连上局域网&#xff0c;局域网一台服务器通过FastAPI提供8000端口的web服务&#xff0c;在esp32c3开发板中烧录micropython固件&#xff0c;在python交互模式下&#xff0c;连上Wifi模块&#xff0c;并使用socket模块获…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...