背景

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

实现方式

实现关键库  PHPExcel-1.8

PHPExcel-1.8的获取

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

上传excel信息到数据库,

上传界面

关键代码如下

<?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 ";    }}?>

生成检修计划主要代码

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

<?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;?>

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

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

telnet到设备里 php_PHP自动生成设备周检修计划相关推荐

  1. Linux字符驱动中动态分配设备号与动态生成设备节点

    在编写Linux内核驱动程序的时候,如果不动态生成设备号的话,需要自己手动分配设备号,有可能你分配的设备号会与已有设备号相同而产生冲突.因此推荐自动分配设备号.使用下面的函数: int alloc_c ...

  2. 新字符设备驱动实验(自动分配设备号、自动创建应用层设备节点、新字符设备注册到内核的结构体)

    目录 自动分配和释放设备号 示例代码 新的字符设备注册到内核方法 字符设备结构体(前面的设备号也放进来) cdev_init结构体初始化函数 cdev_add 添加到linux内核 cdev_del内 ...

  3. telnet到设备里 php_金融行业思科设备典型网络故障案例:76系列典型案例(一)...

    一.Cisco 7606主备引擎自动切换01故障现象 某行上联路由器cisco7606 x月x日引擎自行切换,这种情况是第一次发生,至今仍是备引擎是active,主引擎是standby. 02分析过程 ...

  4. linux字符驱动之自动创建设备节点

    上一节中,我们是手工创建设备节点,大家肯定也会觉得这样做太麻烦了. 上一节文章链接:https://blog.csdn.net/qq_37659294/article/details/10430270 ...

  5. Linux驱动(11)--生成设备节点

    生成设备节点 1. 生成设备节点 1.1 杂项设备 1.2 注册文件 1.3 生成设备节点源代码 1.4 生成设备节点步骤 1.5 需要注意的问题 2. 调用设备节点 1. 生成设备节点 1.1 杂项 ...

  6. 自动生成Android界面,面向Android的Web Service界面自动生成技术研究

    摘要: 据统计,开发人员在开发应用程序的过程中,接近一半的代码用于用户界面部分,大约一半的运行时间用于执行这一部分.所以,减少用户界面部分的开发代码和运行时间,能有效提高程序的运行效率.智能家居中,由 ...

  7. linux设备usb节点和硬件接口,所谓设备驱动即驱使硬件设备行动,带你深入理解linux的设备驱动......

    原标题:所谓设备驱动即驱使硬件设备行动,带你深入理解linux的设备驱动... 设备驱动最通俗的解释就是"驱使硬件设备行动".操作系统是通过各种驱动程序来驾驭硬件设备的,它为用户屏 ...

  8. 怎么从已有文件中挑选需要的文字重新生成新文件_word 中如何实现 一个正文位置输入 另一个正文地方自动生成一样的...

    展开全部 问:WORD里边怎样设置每页不同32313133353236313431303231363533e59b9ee7ad9431333264643764的页眉?如何使不同的章节显示的页眉不同? ...

  9. linux设备文件生成,Linux设备文件自动生成(示例代码)

    第一种是使用mknod手工创建:# mknod 第二种是自动创建设备节点:利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置. 具体udev相关 ...

最新文章

  1. 文献阅读方法 如何阅读英文文献 - 施一公(转)
  2. VIM7.3添加中文帮助文档
  3. windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
  4. c语言题库杭电,C语言杭电18级B卷试题答案.doc
  5. 安装错误 服务尚未启动_原创 | 西门子300软件安装出错处理大全
  6. 验证整数 Double 转 int 两种写法
  7. 玩转oracle 11g(44):数据库发展历史
  8. html 方式使用iview,VUE之iview框架使用教程
  9. axios vue 回调函数_VUE使用axios调用后台API接口的方法
  10. python 打开exe获取窗口句柄_使用Python快速启动多个PC客户端
  11. 机器学习理论与实战:逻辑回归
  12. python 存储数据到有向无环图寻找路径_Python 随即生成DAG(有向无环图)
  13. 蜘蛛侠的入侵:互联网公司robots协议法律指南
  14. mysql 指定驱动表_了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表
  15. xStream 的简单使用 xml to bean
  16. 惠普m1216硒鼓清零步骤_hpm1213nf清零
  17. 使用hue时hive的历史查询记录结果无法下载
  18. bit与Byte,KB与KiB,MB与MiB,GB与GiB等
  19. 双向可控硅晶片光耦(TLP160J TLP260J TLP525G)基本原理及应用实例
  20. 程序员,你以为你很优秀,但却面试屡屡失败?

热门文章

  1. dbscan论文_论文分享 :Linkage Based Face Clustering via GCN
  2. 泰山200机架服务器包含哪些型号_数据中心机房建设中的关键问题都有哪些?
  3. linux的spio在服务器间,scp 将数据从一台linux服务器复制到另一台linux服务器
  4. mysql怎么查找列命令_MySQL查询命令-DQL
  5. 双11技术分享 | “喵糖”背后的商业化流量投放算法
  6. 计算机配置 凭据分配,win7怎样添加凭据?-win7添加凭证的方法 - 河东软件园
  7. java什么是原生类_Java 基础 - 原生类型
  8. 深度学习之卷积神经网络(2)卷积神经网络结构
  9. 深度学习(25)随机梯度下降三: 激活函数的梯度
  10. CF思维联系--CodeForces - 218C E - Ice Skating (并查集)