telnet到设备里 php_PHP自动生成设备周检修计划

背景

        维修人员根据设备年度检修计划,然后制订周检修计划(设备年度计划包含设备一年需要维护几次等信息,根据年度计划分解到某一个周去执行)。在这个过程中,大量的excel复制粘贴工作,浪费人力并且容易出错。并且在审核过程中,一旦发现检修计划出现差错,是很严重的问题。通过VBA可以实现自动生成检修计划,但是我不会VBA,也不想学,就百度一下看看有没有其他方式,于是有了本篇文章记录一下。

实现方式

a3d801d237d7d46e2d5997fff0bc6601.png

实现关键库  PHPExcel-1.8

PHPExcel-1.8的获取

Github地址:https://github.com/yuanhuihai/PHPExcel 官方已经不维护了,最新版的是PhpSpreadsheet,地址https://github.com/yuanhuihai/PhpSpreadsheet

上传excel信息到数据库,

上传界面

9daee52aad78806f77e44f3a95ad0047.png

关键代码如下

<?php require_once '../../conf/class/OrcHelper.class.php';//数据库操作类$tool=new OrcHelper();$conn=$tool->conn;//引用PHPExcel中的文件,根据层级目录选择../的个数require_once '../../conf/PHPExcel-1.8/Classes/PHPExcel.php';require_once '../../conf/PHPExcel-1.8/Classes/PHPExcel/IOFactory.php';require_once '../../conf/PHPExcel-1.8/Classes/PHPExcel/Reader/Excel5.php';$objReader = PHPExcel_IOFactory::createReader('excel5'); //use Excel2007 for 2007 format$uploaded_file = $_FILES['myfile']['tmp_name'];$user_path ="E:/phpStudy/WWW/sc/website/beijian/repair_parts/uploadfile";    //上传文件存放目录$file_true_name = $_FILES['myfile']['name'];$move_to_file = $user_path . "/" .  $file_true_name;//上传文件名。$res=move_uploaded_file($uploaded_file, $move_to_file);//$excelpath='repair.xls';$objPHPExcel = $objReader->load($move_to_file);$sheet = $objPHPExcel->getSheet(0);//$highestRow = $sheet->getHighestRow();           //取得总行数$highestRow =$_POST['zhonglei']+1;           //取得总行数$highestColumn = $sheet->getHighestColumn(); //取得总列数for($j=2;$j<=$highestRow;$j++)                        //从第二行开始读取数据{    $str="";    for($k='A';$k<=$highestColumn;$k++)            //从A列读取数据    {        $str .=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'|*|';//读取单元格    }    $str=mb_convert_encoding($str,'UTF-8','auto');//根据自己编码修改    $strs = explode("|*|",$str);//插入数据库    $sql = "insert into INSPECTIONPLAN_VT VALUES ('{$strs[0]}','{$strs[1]}','{$strs[2]}','{$strs[3]}','{$strs[4]}','{$strs[5]}','','{$strs[6]}')";    $res=oci_parse($conn,$sql);    if(oci_execute($res))    {        echo ";    }}?>

生成检修计划主要代码

10f095af1a465fc7d73a591491eb5a11.png

前端提交后,转入后端代码如下

<?php require_once '../../conf/class/OrcHelper.class.php';require_once '../../conf/PHPExcel-1.8/Classes/PHPExcel.php';require_once '../../conf/PHPExcel-1.8/Classes/PHPExcel/Writer/Excel2007.php';date_default_timezone_set("Asia/Shanghai");$tool=new OrcHelper();$conn=$tool->conn;$week=$_POST['week'];//前端提交数据$area=$_POST['area'];//前端提交数据$sql = "SELECT * FROM INSPECTIONPLAN_VT where WEEK='$week'and AREA='$area' ";$stmt=$tool->Execute_Sql($sql);//首先创建一个新的对象  PHPExcelobject$objPHPExcel =   new   PHPExcel();//设置文件的一些属性,在xls文件——>属性——>详细信息里可以看到这些值,xml表格里是没有这些值的$objPHPExcel    ->getProperties()    //获得文件属性对象,给下文提供设置资源    ->setCreator(   "yuan")             //设置文件的创建者    ->setLastModifiedBy(   "yuan")       //设置最后修改者    ->setTitle(   "Office2007 XLSX Test Document"   )    //设置标题    ->setSubject(   "Office2007 XLSX Test Document"   )  //设置主题    ->setDescription(   "Test document for Office2007 XLSX, generated using PHP classes.")   //设置备注    ->setKeywords(   "office 2007 openxmlphp")        //设置标记    ->setCategory(   "Test resultfile");                 //设置类别// 位置aaa *为下文代码位置提供锚//给表格添加数据$objPHPExcel->setActiveSheetIndex(0);             //设置第一个内置表(一个xls文件里可以有多个表)为活动的$sheettmp = $objPHPExcel->getActiveSheet();$sheettmp->mergeCells( 'A1:N1');//单元格合并$sheettmp->setCellValue(   'A1',   '二涂维修班组_____年__月__日检修计划'   )  ;     //给表的单元格设置数据$sheettmp->getStyle('A1:N1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'A2:N2');      //A28:B28合并$sheettmp->setCellValue(   'A2',   '编号:AA-CP2PA-Q-305-B01'   )  ;     //给表的单元格设置数据$sheettmp->getStyle('A2:N2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);$sheettmp->mergeCells( 'A3:A4');$sheettmp->setCellValue(   'A3',   '序号'   )  ;$sheettmp->getStyle('A3:A4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'B3:B4');$sheettmp->setCellValue(   'B3',   '功能组'   )  ;$sheettmp->getStyle('B3:B4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'C3:C4');$sheettmp->setCellValue(   'C3',   '设备名称'   )  ;$sheettmp->getStyle('C3:C4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'D3:D4');$sheettmp->setCellValue(   'D3',   '位置'   )  ;$sheettmp->getStyle('D3:D4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'E3:F3');$sheettmp->setCellValue(   'E3',   '计划工时'   )  ;$sheettmp->getStyle('E3:F3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->setCellValue(   'E4',   '机械'   )  ;$sheettmp->getStyle('E4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->setCellValue(   'F4',   '电气'   )  ;$sheettmp->getStyle('F4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'G3:G4');$sheettmp->setCellValue(   'G3',   '检修内容'   )  ;$sheettmp->getStyle('G3:G4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'H3:H4');$sheettmp->setCellValue(   'H3',   '人数'   )  ;$sheettmp->getStyle('H3:H4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'I3:I4');$sheettmp->setCellValue(   'I3',   '负责人'   )  ;$sheettmp->getStyle('I3:I4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'J3:J4');$sheettmp->setCellValue(   'J3',   '检查人'   )  ;$sheettmp->getStyle('J3:J4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'K3:K4');$sheettmp->setCellValue(   'K3',   '进度安排'   )  ;$sheettmp->getStyle('K3:K4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'L3:L4');$sheettmp->setCellValue(   'L3',   '完成情况'   )  ;$sheettmp->getStyle('L3:L4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'M3:M4');$sheettmp->setCellValue(   'M3',   '检查人签字'   )  ;$sheettmp->getStyle('M3:M4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$sheettmp->mergeCells( 'N3:N4');$sheettmp->setCellValue(   'N3',   '备注'   )  ;$sheettmp->getStyle('N3:N4')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置表格宽度$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(4);#设置单元格宽度$objPHPExcel->getActiveSheet()->getStyle("A1")->getFont()->setBold(true)    ->setSize(18);$objPHPExcel->getActiveSheet()->getStyle("A3:N4")->getFont()->setBold(true);$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(6);#设置单元格宽度$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(6);#设置单元格宽度$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(6);#设置单元格宽度$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(34);#设置单元格宽度$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(4);#设置单元格宽度$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(4);#设置单元格宽度// 设置垂直居中$objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);// 设置自动换行$objPHPExcel->getDefaultStyle()->getAlignment()->setWrapText(true);// 设置单元格边框$styleThinBlackBorderOutline = array(    'borders' => array(        'allborders' => array( //设置全部边框            'style' => PHPExcel_Style_Border::BORDER_THIN //粗的是thick        ),    ),);//获取数据$i=0;while($rows = oci_fetch_array($stmt,OCI_RETURN_NULLS))  {    $start=5+$i;    $sheettmp->setCellValue('A' . $start, $i+1);    $sheettmp->setCellValue('B' . $start, $rows[2]);    $sheettmp->setCellValue('C'. $start, $rows[3]);    $sheettmp->setCellValue('D'. $start, $rows[4]);    $sheettmp->setCellValue('G' . $start, $rows[5]);    $i++;}$objPHPExcel->getActiveSheet()->getStyle( 'A3:N'.($i+4))->applyFromArray($styleThinBlackBorderOutline);//$data=   array(//               array('0','1','2','0','1','2','0','1','2','0','1','2',),//               array('0','1','2','0','1','2','0','1','2','0','1','2',),//               array('0','1','2','0','1','2','0','1','2','0','1','2',)////              ); 引入数据////for($i=0;$i//    $colIndex='A';//    $start=5+$i;//    for($j=0;$j//        $sheettmp->setCellValue($colIndex . $start, $data[$i][$j]);//        $colIndex++;//    }////}// 删除多余的最后一列//$objPHPExcel->getActiveSheet()->removeColumn(++$colIndex,1);//得到当前活动的表,注意下文教程中会经常用到$objActSheet$objActSheet =$objPHPExcel->getActiveSheet();// 位置bbb *为下文代码位置提供锚//给当前活动的表设置名称$objActSheet->setTitle($week.'周');//生成2003版本//header('Content-Type:application/vnd.ms-excel');//header('Content-Disposition:attachment;filename="01simple.xls"');//header('Cache-Control:max-age=0');////$objWriter =PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//$objWriter->save('php://output');//exit;//生成2007版本header('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');header('Content-Disposition:attachment;filename="检修计划.xlsx"');header('Cache-Control:max-age=0');$objWriter =PHPExcel_IOFactory:: createWriter($objPHPExcel, 'Excel2007');$objWriter->save( 'php://output');exit;?>

关于单元格的合并,单元格的宽度、高度、字体大小等等,大家可以自行百度获取方法。这里不再细说。

我们看一下自动生成检修计划的效果

b9241b3029457b238df86e2a411c2dc9.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通俗讲解:图像傅里叶变换

转自某乎&#xff1a;通俗讲解&#xff1a;图像傅里叶变换 - 知乎 这里我们主要要讲的是二维图像傅里叶变换&#xff0c;但是我们首先来看一张很厉害的一维傅里叶变换动图。 妈耶~厉害哇&#xff01;它把时域和频域解释的很清楚&#xff01; 什么&#xff01;你看不懂&#x…

数据库断线重连_干货分享—Niushop数据库配置

前几期阿牛ger主讲了代码编码规范&#xff0c;整洁规范的代码有利于我们查询和再次开发&#xff0c;也方便我们检测与修复bug&#xff01;这期&#xff0c;阿牛ger主要与大家分享数据库编码配置&#xff1a;数据库配置Niushop数据库配置方式与thinkphp相同&#xff0c;文件路径…

怎么将matlab滤波器系数导出_matlab与FPGA数字信号处理系列(1)——通过matlab工具箱设计FIR数字滤波器...

以99阶FIR低通滤波器为例&#xff0c;学习使用matlab的fdatool工具箱设计滤波器&#xff0c;并将滤波器系数导出到.coe文件&#xff0c;联合Vivado进行FPGA的FIR滤波器设计。本文滤波器参数为&#xff1a;低通FIR滤波器&#xff0c;窗函数设计&#xff0c;采用布莱克曼窗&#…

UGUI 合批原理

转自&#xff1a; UGUI合批原理笔记 - 赵青青 - 博客园 UGUI合批规则图解_时光不染-CSDN博客_ugui合批规则 合批的过程# 网格更新机制# Cavans.SendWillRenderCanvas m_LayoutRebuildQueuem_GraphicRebuildQueueCanvas.BuildBatch 更新所有DrawCall WaitingForJob 子线程网格…

vb.net 设置打印纸张与页边距_装订文档时不想让文字被挡住?在Excel中你可以这样设置打印!...

平时我们在打印文档的时候&#xff0c;通常会把文档左侧的页边距设置的大一点&#xff0c;这样在装订的时候显得美观一点。但如果我们进行双面打印时&#xff0c;文档左右两边的页边距刚好相反&#xff0c;装订时第2页的文本很容易被挡住&#xff0c;这样子反而更难装订了。那么…

CPU Cache原理与示例

转自这篇 CPU Cache&#xff0c;估计也没人看 基础知识 首先&#xff0c;我们都知道现在的 CPU 多核技术&#xff0c;都会有几级缓存&#xff0c;老的 CPU 会有两级内存&#xff08;L1 和 L2&#xff09;&#xff0c;新的CPU会有三级内存&#xff08;L1&#xff0c;L2&#x…

python集合的基本操作不包括_Python基础知识储备,List集合基本操作大盘点

List列表是Python中最基本的数据结构&#xff0c;也是Python中使用频率最高的数据类型&#xff0c;List列表中的元素不需要具有相同类型&#xff0c;使用起来非常方便。现在就来体验一下List列表的基本操作。 list集合基本操作 List的基本操作&#xff08;&#xff0c;copy&…

mysql blob hex_数据库的完整备份与恢复 quot;--hex-blobquot; - - ITeye博客

闲言少絮&#xff0c;这个程序利用MySql数据库自带小程序进行数据库的备份和还原。这两个程序分别是&#xff1a;mysql.exe和mysqldump.exe。这两个程序在您安装Mysql数据库的时候会自动安装到数据库的bin目录。这两个程序存在的目录为&#xff1a;C:\Program File\MySQL\MySQL…

android中怎么保存checkbox中的checked属性_Vue 精粹:v-model指令在组件中怎么玩

最近在写组件的时候&#xff0c;遇到了 v-model 的使用问题&#xff0c;在 Vue 官方文档中&#xff0c;有两小端内容是关于 v-model 指令在组件中的使用,查阅文档后&#xff0c;依然不得要领&#xff0c;最后几番折腾&#xff0c;理论结合实践&#xff0c;终于领悟其精髓&#…

linux location root访问文件夹404_如何使网站支持https访问?nginx配置https证书

购买SSL证书要想使用https访问你的网址&#xff0c;首先得拥有颁发的SSL证书。我使用的是免费版&#xff0c;有效期为一年&#xff0c;过期后再重新申请。申请SSL证书购买后&#xff0c;可在搜索框输入证书关键字进入到控制台。点击证书申请&#xff0c;按照提示填写完相关信息…

mysql rank函数_Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

排名函数是Sql Server2005新增的功能&#xff0c;下面简单介绍一下他们各自的用法和区别。我们新建一张Order表并添加一些初始数据方便我们查看效果。表结构和初始数据Sql附上表结构和初始数据图&#xff1a;一、ROW_NUMBERrow_number的用途的非常广泛&#xff0c;排序最好用他…

git2.29.2.2怎么安装_MySQL5.5怎么安装

安装MySQL5.5的步骤&#xff1a;1、 官网下载mysql5.5下载地址&#xff1a;http://dev.mysql.com/downloads/mysql/5.5.html#downloads2、 安装mysql5.5注意&#xff0c;安装之前&#xff0c;请关闭杀毒软件。1)、 打开下载的mysql-5.5.53-winx64.msi2) 、点击下一步3)、 选中复…

未声明spire。它可能因保护级别而不可访问_信息系统安全:访问控制技术概述...

1.访问控制基本概念身份认证技术解决了识别“用户是谁”的问题&#xff0c;那么认证通过的用户是不是可以无条件地使用所有资源呢&#xff1f;答案是否定的。访问控制(Access Control)技术就是用来管理用户对系统资源的访问。访问控制是国际标准ISO7498-2中的五项安全服务之一&…

c++反汇编与逆向分析技术揭秘_C++反汇编与逆向分析技术揭秘

一、单类继承在父类中声明为私有的成员&#xff0c;子类对象无法直接访问&#xff0c;但是在子类对象的内存结构中&#xff0c;父类私有的成员数据依然存在。C语法规定的访问限制仅限于编译层面&#xff0c;在编译过程中进行语法检查&#xff0c;因此访问控制不会影响对象的内存…

std::atomic原子操作

第十一节std::atomic原子操作_HITXJ的博客-CSDN博客_std::atomic用法

php与mysql列表_PHP+Mysql+jQuery实现的查询和列表框选择

本篇文章主要介绍PHPMysqljQuery实现的查询和列表框选择&#xff0c;感兴趣的朋友参考下&#xff0c;希望对大家有所帮助。本文讲解如何通过ajax查询mysql数据&#xff0c;并将返回的数据显示在待选列表中&#xff0c;再通过选择最终将选项加入到已选区&#xff0c;可以用在许多…

range函数python2和3区别_range函数python2和3区别

range函数是一个用来创建算数级数序列的通用函数&#xff0c;返回一个[start, start step, start 2 * step, ...]结构的整数序列&#xff1b;py2中的range()函数用法&#xff1a;&#xff08;推荐学习&#xff1a;Python视频教程&#xff09; range()返回的是一个列表>>&…

Unity SRP自定义渲染管线 -- 2.Custom Shaders

本章将接着上一篇文章&#xff0c;在初步实现一个渲染管线后来创建自定义的shader。上一篇文章的链接 https://blog.csdn.net/yinfourever/article/details/90516602。在本章中&#xff0c;将完成以下内容&#xff1a; 写一个HLSL Shader定义constant buffer&#xff08;常量缓…

tcp 三次握手与四次挥手_TCP三次握手与四次挥手详解

TCP报文结构源端口和目的端口&#xff1a;各占2个字节&#xff0c;分别写入源端口号和目的端口号。序号&#xff1a;占4个字节。序号使用mod运算。TCP是面向字节流的&#xff0c;在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。故该字段也叫做“报文段序号”。确认序…

网关和路由器的区别_5G工业路由器与5G DTU的区别介绍详解

5G工业路由器和5G DTU都是实现无线网络数据传输功能&#xff0c;而两者间的区别主要从使用方法、外观接口以及应用环境等方面区分&#xff0c;今天给大家介绍5G工业路由器和5G DTU的一些不同点。使用方法的不同:5G工业路由器&#xff1a;5G路由器可对以太网、现场总线通信协议进…