当前位置: 首页 > 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模块获…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...