在此项目中,主要完成了用PHPExcel导出投票数据、分享二维码、添加投票的页面设计()以及一些页面的点击事件。
项目环境:ThinkPHP3.2,LayUI
一、PHPExcel导出投票数据
逻辑思路:获取数据–>设置表头–>渲染数据–>输出
-
按照导出格式获取数据
- 从表中获取到相关数据后将数据的键调整一下
- 统计的数据中由于每人做的题数不同,所以记录做题最多的(方便设置表头)
-
按照导出格式设置表格导航(即表格固定文字)
- 将表头对应的内容及与之相关的存放起来,如:
$cell_name = array( 'id' => '序号', 'user_name' => '用户名', 'bumen' => '部门', 'user_name_true' => '员工姓名', 'end_time' => '提交答卷时间', 'use_time' => '答题所用时间' );
- 设置表格单元格
$cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J') //从A-Z,AA-AZ,按顺序,按需设置,如果是固定的可以写死,不固定的话适当大一点。 //不过这里设置的若比实际的少,将会报错, //在开发过程中应留下注释,在以后的开发过程中容易定位到此问题
-
渲染数据
- PHPExcel的存放路径为:
ThinkPHP/Library/Org/Util/
- 导出PHPExcel的方法
import("Org.Util.PHPExcel"); import('Org.Util.PHPExcel.IOFactory');
- new PHPExcel对象
//此处的反斜杠\不能少 $objPHPExcel = new \PHPExcel(); $objPHPExcel->setActiveSheetIndex(0);
- 第一行
$objPHPExcel->getActiveSheet()->mergeCells('A1:' . $cellName[$cellNum - 1] . '1');//合并单元格 $objPHPExcel->getActiveSheet()->setCellValue('A1', $vote_title . ' 导出时间:' . date('Y-m-d H:i:s'));
- 第二行
$cell_id = 0; foreach ($cell_name as $cell_name_val) { $objPHPExcel->getActiveSheet()->setCellValue($cellName[$cell_id] . '2', $cell_name_val); ++$cell_id; }
- 从第三行开始遍历输出第一步获取的要导出的,同上数据
- PHPExcel的存放路径为:
-
输出到本地
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天 |
这段时间加强了自己的前端技能,导出使用更加熟练。希望自己能够再接再厉。