完成毕业后第一个功能的一个小总结

在此项目中,主要完成了用PHPExcel导出投票数据、分享二维码、添加投票的页面设计()以及一些页面的点击事件。

项目环境:ThinkPHP3.2,LayUI

一、PHPExcel导出投票数据

逻辑思路:获取数据–>设置表头–>渲染数据–>输出

  1. 按照导出格式获取数据

    1. 从表中获取到相关数据后将数据的键调整一下
    2. 统计的数据中由于每人做的题数不同,所以记录做题最多的(方便设置表头)
  2. 按照导出格式设置表格导航(即表格固定文字)

    1. 将表头对应的内容及与之相关的存放起来,如:
    	$cell_name = array(
                'id' => '序号',
                'user_name' => '用户名',
                'bumen' => '部门',
                'user_name_true' => '员工姓名',
                'end_time' => '提交答卷时间',
                'use_time' => '答题所用时间'
            );
    
    1. 设置表格单元格
    $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J')
    //从A-Z,AA-AZ,按顺序,按需设置,如果是固定的可以写死,不固定的话适当大一点。
    //不过这里设置的若比实际的少,将会报错,
    //在开发过程中应留下注释,在以后的开发过程中容易定位到此问题
    
  3. 渲染数据

    1. PHPExcel的存放路径为:ThinkPHP/Library/Org/Util/
    2. 导出PHPExcel的方法
    	import("Org.Util.PHPExcel");
    	import('Org.Util.PHPExcel.IOFactory');
    
    1. new PHPExcel对象
    	//此处的反斜杠\不能少
        $objPHPExcel = new \PHPExcel();
        $objPHPExcel->setActiveSheetIndex(0);
    
    1. 第一行
    	$objPHPExcel->getActiveSheet()->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');//合并单元格
    	$objPHPExcel->getActiveSheet()->setCellValue('A1', $vote_title . ' 导出时间:' . date('Y-m-d H:i:s'));	
    
    1. 第二行
    	$cell_id = 0;
    	foreach ($cell_name as $cell_name_val) {
      		    $objPHPExcel->getActiveSheet()->setCellValue($cellName[$cell_id] . '2', $cell_name_val);
        		++$cell_id;
    	 }
    
    1. 从第三行开始遍历输出第一步获取的要导出的,同上数据
  4. 输出到本地

    	header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"');
    	//注意:此处fileName加了双引号
    	//原因:当fileName中含有,等特殊字符时,系统会崩溃
    	//故将fileName加双引号,转义特殊字符 ??
    	//???不知道这么解释对不对,这样便可以解决问题
        header("Content-Disposition:attachment;filename=\"$fileName\".xls");
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    

PHPExcel导出文件这块需要注意的问题有两个:
其一 是在new 对象时,务必加上前面的反斜杠
其二是当设置的文件名中含有,等特殊字符时,系统崩溃

二、分享二维码
~~此方法来源于:某博客 现在没网了,后续补上。~~

emmm,现在貌似可以上网了,但是没找到我用的这个方法的博主。这个等我回头再找到再添上,如有发现的,也可告知与我,在此谢过。

    /**
    * phpqrcode php生成二维码
    * $frame string 二维码内容
    * $filename string|false 默认为否,不生成文件,只将二维码图片返回,否则需要给出存放生成二维码图片的路径
    * $level 默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%)。这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比。
    * $size int 生成二维码的区域大小点的大小:1到10
    * $margin int 图片留白大小
    * $saveandprint string 保存二维码图片并显示出来,$outfile必须传递图片路径
    */
   public function img($frame, $filename = false, $level = 'L', $size = 5, $margin = 2, $saveandprint = false)
   {
       header('Content-Type: image/png');
       vendor('phpqrcode.phpqrcode');
       $qrcode = new \QRcode();
       ob_clean();
       $png = $qrcode->png($frame, $filename, $level, $size, $margin, $saveandprint);
       return $png;
   }

2019-6-21
此处由于功能需求,需要将二维码弹窗、并提供下载功能
小飞机来咯~layui二维码弹窗,并下载二维码

三、添加试题页面设计

待整理后另写一篇博客再上传。
这个地方回头附上连接
链接来啦 动态添加试题

四、其他页面的点击请求事件

同三

总结
从分配任务到这篇博客完结,总时间花费大约三个星期。
时间大致分配情况:

功能 时间
导出 2天
分享 0.5天
添加投票页面 第一套2天,第二套3天
其他事件优化 3天

这段时间加强了自己的前端技能,导出使用更加熟练。希望自己能够再接再厉。

你可能感兴趣的:(PHPExcel导出,分享二维码并下载,试题动态添加,PHP)