记录:使用laydate实现指定多个日期,并传到后台,后台获取这些日期的打卡记录并统计个人的打卡情况出勤率及部门出勤率
HTml代码:

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>layui</title><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><link rel="stylesheet" href="__ADMINLIB__/layui-v2.5.5/css/layui.css" media="all"><link rel="stylesheet" href="__ADMINCSS__/public.css" media="all"><style>.layui-table-cell {height: 50px;line-height: 50px;}.laydate-day-mark {background-color: #5FB878;color: white;}.laydate-day-mark::after {background-color: #5FB878;}</style>
</head><body><div class="layuimini-container"><div class="layuimini-main"><!-- 导出弹出框选择日期/部门 --><div class="layui-form layui-form-pane m-15 export-detail" style="padding: 15px; display: none;"><div class="layui-form-item"><label class="layui-form-label" style="border: none;">单位</label><div class="layui-input-inline"><select name="danwei" lay-search="" id="danwei"><option value="">选择单位</option>{volist name="floor" id="vo"}<option value="{$vo.name}">{$vo.name}</option>{/volist}</select></div></div><!-- 禁选星期几:1,2,3,4,5,6,0 --><input type="hidden" id="appointmentDate" value=""><div class="layui-form-item" style="width: 100%;text-align: center;"><label class="layui-form-label" style="border: none;">日期</label><div class="layui-input-inline"><div class="layui-inline" id="export_time"></div><input type="hidden"  id="ignoreDate" value=""/></div></div></div><script type="text/html" id="toolbarDemo"><div class="layui-btn-container"><button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" style="margin-bottom: 0px;" lay-event="add"> 导出打卡统计</button></div></script><table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table></div></div><script src="__ADMINLIB__/layui-v2.5.5/layui.js" charset="utf-8"></script><script src="__PUBLIC__/time.js" charset="utf-8"></script><script>layui.use(['layer', 'form', 'table', 'jquery', 'laydate'], function () {var $ = layui.jquery,layer = layui.layer,form = layui.form,laydate = layui.laydate,table = layui.table;//获取当前时间function getNowFormatDate() {var date = new Date();var seperator1 = "-";var year = date.getFullYear();var month = date.getMonth() + 1;var strDate = date.getDate();if (month >= 1 && month <= 9) {month = "0" + month;}if (strDate >= 0 && strDate <= 9) {strDate = "0" + strDate;}var currentdate = year + seperator1 + month + seperator1 + strDate;return currentdate;}//定义jsonvar data = getMonthDate();  //默认选中本月非周六、周日的所有日期,且最大可选至今天var new_date = new Date();loding_date(new_date, data);//日历插件调用方法function loding_date(new_date, data) {laydate.render({elem: '#export_time',type: 'date',theme: 'grid',max: getNowFormatDate(),    //最大可选至今天position: 'static',range: false,value: new_date// , min:getNowFormatDate() //获取当前时间,isInitValue: false,calendar: false,btns: false,mark: data //重要json!,ready: function (value) {disabled_date(value, $("#appointmentDate").val());hide_mr(data);},done: function (value, date) {dateset(value, data);},change: function (value, date) {disabled_date(date, $("#appointmentDate").val());hide_mr(data);}});}//设置不可选择的星期function disabled_date(value, appointmentDate) {var mm = value.year + '-' + value.month + '-' + value.date;$('.laydate-theme-grid table tbody').find('[lay-ymd="' + mm + '"]').removeClass('layui-this');if (appointmentDate != null && appointmentDate != '') {var dates = appointmentDate.split(",");for (var i = 0; i < dates.length; i++) {if (dates[i] == "7") {dates[i] = 0;}$("table>tbody>tr").find("td:eq(" + dates[i] + ")").addClass('ng-laydate-disabled');}}}//设置选中function hide_mr(markJson) {keys = [];if (markJson != null) {for (var key in markJson) {var dates = key.split("-");dates[1] = dates[1] * 1;var mm = dates[0] + '-' + dates[1] + '-' + dates[2];$('.laydate-theme-grid table tbody').find('[lay-ymd="' + mm + '"]').addClass('layui-this');keys.push(key);}}if (keys.length >= 0) {$("#ignoreDate").val(keys);}}//定义添加/编辑标注方法function chose_moban(obj_date, markJson) {$('#export_time').html(''); //重要!由于插件是嵌套指定容器,再次调用前需要清空原日历控件if (markJson.hasOwnProperty(obj_date)) {delete markJson[obj_date]} else {//添加属性markJson[obj_date] = ''}loding_date(obj_date, markJson); //重要!,再标注一个日期后会刷新当前日期变为初始值,所以必须调用当前选定日期。}//done回调方法function dateset(value, data) {hide_mr(data);chose_moban(value, data);}table.render({elem: '#currentTableId',url: "{:url('signin')}",toolbar: '#toolbarDemo',defaultToolbar: ['filter', 'print', {title: '提示',layEvent: 'LAYTABLE_TIPS',icon: 'layui-icon-tips'}],cols: [[{type: "checkbox",width: 50},{field: 'id',title: 'ID',sort: true},{field: 'username',title: '打卡人'},{field: 'status',width: 80,title: '状态',templet: function (res) {if (res.status == 0) {return '正常'} else if (res.status == 1) {return '迟到'} else if (res.status == 2) {return '早退'}}},{field: 'sign_time',width: 200,title: '打卡时间',align: 'right'}]],limits: [10, 15, 20, 25, 50, 100],limit: 10,page: true,skin: 'line',done: function (res, curr, count) {// form.render();}});// 监听搜索操作form.on('submit(data-search-btn)', function (data) {var result = data.field;//执行搜索重载table.reload('currentTableId', {page: {curr: 1},where: {searchParams: result}}, 'data');return false;});//toolbar监听事件table.on('toolbar(currentTableFilter)', function (obj) {if (obj.event === 'add') { // 监听添加操作var index = layer.open({title: '导出打卡统计',type: 1,shade: 0.2,maxmin: true,shadeClose: true,area: ['500px', '530px'],content: $('.export-detail'),btn: ['确定', '取消'],yes: function () { //确定按钮var danwei = $("#danwei").val();var ignoreDate = $('#ignoreDate').val();if(ignoreDate){window.open("/aixin/public/index.php/admin/signin/export?danwei=" + danwei + "&ignoreDate=" + ignoreDate);layer.closeAll();}else{layer.msg('请选择日期');} },btn2: function () { //取消按钮layer.closeAll();}});$(window).on("resize", function () {layer.full(index);});} else if (obj.event === 'delete') { // 监听删除操作var checkStatus = table.checkStatus('currentTableId'),data = checkStatus.data;layer.alert(JSON.stringify(data));}});//监听表格复选框选择table.on('checkbox(currentTableFilter)', function (obj) {console.log(obj)});table.on('tool(currentTableFilter)', function (obj) {var data = obj.data;if (obj.event === 'edit') {var index = layer.open({title: '编辑服务信息',type: 2,shade: 0.2,maxmin: true,shadeClose: true,area: ['80%', '95%'],content: "/admin/love/edit?id=" + data.id,});$(window).on("resize", function () {layer.full(index);});return false;} else if (obj.event === 'delete') {layer.confirm('真的删除行么', function (index) {obj.del();layer.close(index);});}});});</script></body></html>

PHP 代码:

use think\facade\Env;/*** 导出打卡统计* 作者:appless* 时间:2021-3-26*/   public function export(){$danwei = input("danwei");$ignoreDate = input("ignoreDate");$dateArr = explode(',',$ignoreDate);asort($dateArr);if(count($dateArr) > 31){return '最多可选择31天';}    //查询打卡记录 $signArr = array();foreach($dateArr as $date){$result = Db::name('signin')->whereBetweenTime('sign_time', $date)->field("uid,sign_time,status,sign_date,sign_type")->select();$data = [$date=>$result];$signArr = array_merge($signArr, $data);}$signDataArr = array();foreach ($signArr as $date => $signList) {$dataVal = array();foreach($signList as $signin){$key = $signin['uid'] . '-' . $signin['status'];if ($signin['status'] == 0) {if($signin['sign_type'] == 1){$key = $signin['uid'] . '-3'; // 下班打卡}}$dataVal[$key] = $signin;}            $signDataArr[$date] = $dataVal;}//查询user表$where = array();$where[] = ['isdel', '=', 2]; // 未删除if ($danwei) {$where[] = ['department', '=', $danwei];}$userlst = DB::name("user")->where($where)->field('id,department,username,name')->select();$allData = array(); //打卡记录$signUserArr = array(); //个人出勤统计$signDepartmentArr = array(); //部门出勤统计foreach ($signDataArr as $date => $signData) {foreach ($userlst as $ak => $av) {$am = array();$am['username'] = $av['username'] ? $av['username'] : $av['name'];$am['department'] = $av['department'];$am['day'] = ' ' . $date;$am['dayor'] = '上午';$pm = array();$pm['username'] = $av['username'] ? $av['username'] : $av['name'];$pm['department'] = $av['department'];$pm['day'] = ' ' . $date;$pm['dayor'] = '下午';$k0 = $av['id'] . '-0'; // 正常上班$k1 = $av['id'] . '-1';  // 迟到$k2 = $av['id'] . '-2';  // 早退$k3 = $av['id'] . '-3';  // 正常下班//上午:正常,迟到,缺勤if (isset($signData[$k0])) {$am['status'] = '正常';$am['sign_time'] = ' ' . date('Y-m-d H:i:s', $signData[$k0]['sign_time']);}if (isset($signData[$k1])) {$am['status'] = '迟到';$am['sign_time'] = ' ' . date('Y-m-d H:i:s', $signData[$k1]['sign_time']);}if (!isset($signData[$k0]) && !isset($signData[$k1])) {$am['status'] = '缺勤';$am['sign_time'] = '';}//下午:早退,正常,缺勤if (isset($signData[$k2])) {$pm['status'] = '早退';$pm['sign_time'] = ' ' . date('Y-m-d H:i:s', $signData[$k2]['sign_time']);}if (isset($signData[$k3])) {$pm['status'] = '正常';$pm['sign_time'] = ' ' . date('Y-m-d H:i:s', $signData[$k3]['sign_time']);}if (!isset($signData[$k2]) && !isset($signData[$k3])) {$pm['status'] = '缺勤';$pm['sign_time'] = '';}$allData[] = $am;$allData[] = $pm;//正常次数$zhengchang = 0;if($am['status'] == '正常' && $pm['status'] = '正常'){$zhengchang = 1;    }//迟到次数$chidao = 0;if($am['status'] == '迟到'){$chidao = 1;    }//早退次数$zaotui = 0;if($pm['status'] == '早退'){$zaotui = 1;    }//当天缺勤次数$queqin = 0;if($am['status'] == '缺勤'){$queqin += 1;    }if($pm['status'] == '缺勤'){$queqin += 1;    }if(array_key_exists($av['id'],$signUserArr)){$signUserArr[$av['id']]['zhengchang'] = $signUserArr[$av['id']]['zhengchang'] + $zhengchang; //正常$signUserArr[$av['id']]['chidao'] = $signUserArr[$av['id']]['chidao'] + $chidao; //迟到$signUserArr[$av['id']]['zaotui'] = $signUserArr[$av['id']]['zaotui'] + $zaotui; //早退$signUserArr[$av['id']]['queqin'] = $signUserArr[$av['id']]['queqin'] + $queqin; //缺勤}else{$signUserArr[$av['id']] = ['username'=>$av['username'] ? $av['username'] : $av['name'],'department'=>$av['department'],'zhengchang'=>$zhengchang,  //正常'chidao'=>$chidao,  //迟到'zaotui'=>$zaotui,  //早退'queqin'=>$queqin,  //缺勤];}       if(array_key_exists($av['department'],$signDepartmentArr)){$signDepartmentArr[$av['department']]['zhengchang'] = $signDepartmentArr[$av['department']]['zhengchang'] + $zhengchang; //正常$signDepartmentArr[$av['department']]['chidao'] = $signDepartmentArr[$av['department']]['chidao'] + $chidao; //迟到$signDepartmentArr[$av['department']]['zaotui'] = $signDepartmentArr[$av['department']]['zaotui'] + $zaotui; //早退$signDepartmentArr[$av['department']]['queqin'] = $signDepartmentArr[$av['department']]['queqin'] + $queqin; //缺勤if(!in_array($av['id'],$signDepartmentArr[$av['department']]['userid'])){$signDepartmentArr[$av['department']]['userid'][] = $av['id'];}}else{$signDepartmentArr[$av['department']] = ['department'=>$av['department'],'zhengchang'=>$zhengchang,  //正常'chidao'=>$chidao,  //迟到'zaotui'=>$zaotui,  //早退'queqin'=>$queqin,  //缺勤'userid'=>[$av['id']],];}  }}$this->down(count($signDataArr),$allData,$signUserArr,$signDepartmentArr);}/*** 导出excel文件* @return mixed* 作者:appless* 时间:2021-3-26*/public function down($dateCount,$list,$signUserArr,$signDepartmentArr) {// vendor("PHPExcel.PHPExcel");require_once(Env::get('root_path') . '/vendor/PHPExcel/PHPExcel.php'); $objPHPExcel = new \PHPExcel();$objPHPExcel->getProperties()->setCreator("ctos")->setLastModifiedBy("ctos")->setTitle("Office 2007 XLSX Test Document")->setSubject("Office 2007 XLSX Test Document")->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")->setKeywords("office 2007 openxml php")->setCategory("Test result file");/*** 创建第一个表格(员工打卡记录)*///设置行宽$objPHPExcel->getActiveSheet(0)->getColumnDimension('A')->setWidth(15);$objPHPExcel->getActiveSheet(0)->getColumnDimension('B')->setWidth(30);$objPHPExcel->getActiveSheet(0)->getColumnDimension('C')->setWidth(20);$objPHPExcel->getActiveSheet(0)->getColumnDimension('D')->setWidth(10);$objPHPExcel->getActiveSheet(0)->getColumnDimension('E')->setWidth(10);$objPHPExcel->getActiveSheet(0)->getColumnDimension('F')->setWidth(30);//设置行高度$objPHPExcel->getActiveSheet(0)->getRowDimension('1')->setRowHeight(25);$objPHPExcel->getActiveSheet(0)->getRowDimension('2')->setRowHeight(25);//set font size bold$objPHPExcel->getActiveSheet(0)->getDefaultStyle()->getFont()->setSize(10);$objPHPExcel->getActiveSheet(0)->getStyle('A2:F2')->getFont()->setBold(true);$objPHPExcel->getActiveSheet(0)->getStyle('A2:F2')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet(0)->getStyle('A2:F2')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(0)->getStyle('A2:F2')->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);//设置水平居中$objPHPExcel->getActiveSheet(0)->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(0)->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(0)->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(0)->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(0)->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//合并cell$objPHPExcel->getActiveSheet(0)->mergeCells('A1:F1');// set table header content$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', '员工打卡记录,统计天数'.$dateCount.',统计时间:'.date('Y-m-d H:i:s'))->setCellValue('A2', '姓名')->setCellValue('B2', '单位')->setCellValue('C2', '日期')->setCellValue('D2', '')->setCellValue('E2', '打卡状态')->setCellValue('F2', '打卡时间');// Miscellaneous glyphs, UTF-8for($i=0;$i<count($list);$i++){$objPHPExcel->getActiveSheet(0)->setCellValue('A'.($i+3), $list[$i]['username']);$objPHPExcel->getActiveSheet(0)->setCellValue('B'.($i+3), $list[$i]['department']);$objPHPExcel->getActiveSheet(0)->setCellValue('C'.($i+3), $list[$i]['day']);$objPHPExcel->getActiveSheet(0)->setCellValue('D'.($i+3), $list[$i]['dayor']);//判断状态if($list[$i]['status'] == '正常'){  $objPHPExcel->getActiveSheet(0)->setCellValue('E'.($i+3), $list[$i]['status']);}else{  //改变字体颜色为红色$objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':F'.($i+3))->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_RED));//改变背景色为蓝色$objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':F'.($i+3))->getFill()->applyFromArray(array('type' => \PHPExcel_Style_Fill::FILL_SOLID,'startcolor' => array('rgb' => 'ADD8E6')));$objPHPExcel->getActiveSheet(0)->setCellValue('E'.($i+3), $list[$i]['status']);}$objPHPExcel->getActiveSheet(0)->setCellValue('F'.($i+3), $list[$i]['sign_time']);//$objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);//$objPHPExcel->getActiveSheet()->getStyle('A'.($i+3).':J'.($i+3))->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);$objPHPExcel->getActiveSheet(0)->getRowDimension($i+3)->setRowHeight(16);}//  sheet命名$objPHPExcel->getActiveSheet(0)->setTitle('员工打卡记录');// Set active sheet index to the first sheet, so Excel opens this as the first sheet,导出第一个结束$objPHPExcel->setActiveSheetIndex(0);/*** 创建第二个表格(员工打卡统计)*/$objPHPExcel->createSheet();$objPHPExcel->setActiveSheetIndex(1)->setCellValue('A1', '员工打卡统计,统计天数'.$dateCount.',统计时间:'.date('Y-m-d H:i:s'))->setCellValue('A2', '姓名')->setCellValue('B2', '单位')->setCellValue('C2', '正常天数')->setCellValue('D2', '迟到天数')->setCellValue('E2', '早退天数')->setCellValue('F2', '未打卡次数')->setCellValue('G2', '出勤率');//设置行宽$objPHPExcel->getActiveSheet(1)->getColumnDimension('A')->setWidth(15);$objPHPExcel->getActiveSheet(1)->getColumnDimension('B')->setWidth(30);$objPHPExcel->getActiveSheet(1)->getColumnDimension('C')->setWidth(10);$objPHPExcel->getActiveSheet(1)->getColumnDimension('D')->setWidth(10);$objPHPExcel->getActiveSheet(1)->getColumnDimension('E')->setWidth(10);$objPHPExcel->getActiveSheet(1)->getColumnDimension('F')->setWidth(15);$objPHPExcel->getActiveSheet(1)->getColumnDimension('G')->setWidth(15);//设置行高度$objPHPExcel->getActiveSheet(1)->getRowDimension('1')->setRowHeight(25);$objPHPExcel->getActiveSheet(1)->getRowDimension('2')->setRowHeight(25);//set font size bold$objPHPExcel->getActiveSheet(1)->getDefaultStyle()->getFont()->setSize(10);$objPHPExcel->getActiveSheet(1)->getStyle('A2:G2')->getFont()->setBold(true);$objPHPExcel->getActiveSheet(1)->getStyle('A2:G2')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet(1)->getStyle('A2:G2')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(1)->getStyle('A2:G2')->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);//设置水平居中$objPHPExcel->getActiveSheet(1)->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(1)->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(1)->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(1)->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(1)->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(1)->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(1)->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(1)->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//合并cell$objPHPExcel->getActiveSheet(1)->mergeCells('A1:G1');// Miscellaneous glyphs, UTF-8$i = 0;foreach ($signUserArr as $key => $value) {$objPHPExcel->getActiveSheet(1)->setCellValue('A'.($i+3), $value['username']);$objPHPExcel->getActiveSheet(1)->setCellValue('B'.($i+3), $value['department']);$objPHPExcel->getActiveSheet(1)->setCellValue('C'.($i+3), $value['zhengchang']);$objPHPExcel->getActiveSheet(1)->setCellValue('D'.($i+3), $value['chidao']);$objPHPExcel->getActiveSheet(1)->setCellValue('E'.($i+3), $value['zaotui']);      $objPHPExcel->getActiveSheet(1)->setCellValue('F'.($i+3), $value['queqin']);    //计算出勤率:正常天数/统计天数 $ratePeople = round($value['zhengchang']/$dateCount,4) * 100; $objPHPExcel->getActiveSheet(1)->setCellValue('G'.($i+3), $ratePeople.'%');      $objPHPExcel->getActiveSheet(1)->getRowDimension($i+3)->setRowHeight(16);$i++;}     $objPHPExcel->getActiveSheet(1)->setTitle('员工打卡统计');$objPHPExcel->setActiveSheetIndex(1);/*** 创建第三个表格(部门打卡统计)*/ $objPHPExcel->createSheet();$objPHPExcel->setActiveSheetIndex(2)->setCellValue('A1', '部门打卡统计,统计天数'.$dateCount.',统计时间:'.date('Y-m-d H:i:s'))->setCellValue('A2', '单位')->setCellValue('B2', '单位人数')->setCellValue('C2', '正常天数')->setCellValue('D2', '迟到天数')->setCellValue('E2', '早退天数')->setCellValue('F2', '未打卡次数')->setCellValue('G2', '出勤率');//设置行宽$objPHPExcel->getActiveSheet(2)->getColumnDimension('A')->setWidth(15);$objPHPExcel->getActiveSheet(2)->getColumnDimension('B')->setWidth(30);$objPHPExcel->getActiveSheet(2)->getColumnDimension('C')->setWidth(20);$objPHPExcel->getActiveSheet(2)->getColumnDimension('D')->setWidth(10);$objPHPExcel->getActiveSheet(2)->getColumnDimension('E')->setWidth(10);$objPHPExcel->getActiveSheet(2)->getColumnDimension('F')->setWidth(15);$objPHPExcel->getActiveSheet(2)->getColumnDimension('G')->setWidth(15);//设置行高度$objPHPExcel->getActiveSheet(2)->getRowDimension('1')->setRowHeight(25);$objPHPExcel->getActiveSheet(2)->getRowDimension('2')->setRowHeight(25);//set font size bold$objPHPExcel->getActiveSheet(2)->getDefaultStyle()->getFont()->setSize(10);$objPHPExcel->getActiveSheet(2)->getStyle('A2:G2')->getFont()->setBold(true);$objPHPExcel->getActiveSheet(2)->getStyle('A2:G2')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);$objPHPExcel->getActiveSheet(2)->getStyle('A2:G2')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(2)->getStyle('A2:G2')->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);//设置水平居中$objPHPExcel->getActiveSheet(2)->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(2)->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(2)->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(2)->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(2)->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(2)->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(2)->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);$objPHPExcel->getActiveSheet(2)->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//合并cell$objPHPExcel->getActiveSheet(2)->mergeCells('A1:G1');// Miscellaneous glyphs, UTF-8$i = 0;foreach ($signDepartmentArr as $key => $value) {$objPHPExcel->getActiveSheet(2)->setCellValue('A'.($i+3), $value['department']);$objPHPExcel->getActiveSheet(2)->setCellValue('B'.($i+3), count($value['userid']));$objPHPExcel->getActiveSheet(2)->setCellValue('C'.($i+3), $value['zhengchang']);$objPHPExcel->getActiveSheet(2)->setCellValue('D'.($i+3), $value['chidao']);$objPHPExcel->getActiveSheet(2)->setCellValue('E'.($i+3), $value['zaotui']);      $objPHPExcel->getActiveSheet(2)->setCellValue('F'.($i+3), $value['queqin']);    //计算出勤率:正常天数/统计天数 $rateDepartment = round($value['zhengchang']/($dateCount*count($value['userid'])),4) * 100; $objPHPExcel->getActiveSheet(2)->setCellValue('G'.($i+3), $rateDepartment.'%');      $objPHPExcel->getActiveSheet(2)->getRowDimension($i+3)->setRowHeight(16);$i++;}     $objPHPExcel->getActiveSheet(2)->setTitle('部门打卡统计');$objPHPExcel->setActiveSheetIndex(2);// excel头参数header('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="员工打卡记录-统计时间('.date('Ymd-His').').xls"');  //日期为文件名后缀header('Cache-Control: max-age=0');$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  //excel5为xls格式,excel2007为xlsx格式$objWriter->save('php://output');}

图示:


TP5.1导出指定的多个日期的数据记录相关推荐

  1. 【Python】PDF文档导出指定章节为TXT

    PDF文档导出指定章节为TXT 需求 要导出3000多个pdf文档的特定章节内容为txt格式(pdf文字可复制). 解决 导出PDF 查了一下Python操作PDF文档的方法,主要是通过3个库,PyP ...

  2. R语言ggplot2可视化强制指定X轴的日期范围实战:组合条形图和lm模型构建的回归模型的结果并强制指定X轴的日期范围

    R语言ggplot2可视化强制指定X轴的日期范围实战:组合条形图和lm模型构建的回归模型的结果并强制指定X轴的日期范围 目录

  3. mongodb 导出指定数据库文件大小_大数据技术之将mongodb 数据指定字段导出,然后指定字段导入mysql 实例 及相关问题解决...

    本篇文章探讨了大数据技术之将mongodb 数据指定字段导出,然后指定字段导入mysql 实例 及相关问题解决,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. 需求:将mongo ...

  4. 删除指定天数之前的日期文件夹

    @echo off rem 计算指定天数之前的日期 set DaysAgo=1 rem 假设系统日期的格式为yyyy-mm-dd call :DateToDays %date:~0,4% %date: ...

  5. 2导出指定表结构_大白话详解大数据hive知识点,老刘真的很用心(2)

    老刘不敢说写的有多好,但敢保证尽量用大白话把自己复习的内容详细解释出来,拒绝资料上的生搬硬套,做到有自己的了解! 01 hive知识点(2) 第12点:hive分桶表 hive知识点主要偏实践,很多人 ...

  6. php导出数据库的指定表数据,MYSQL教程mysql数据库导出指定表数据的方法

    <MYSQL教程mysql数据库导出指定表数据的方法>要点: 本文介绍了MYSQL教程mysql数据库导出指定表数据的方法,希望对您有用.如果有疑问,可以联系我们. 导读:linux下导出 ...

  7. MariaDB通过命令行的方式导出指定数据库和还原指定数据库

    摘要:今天由于需要需要从本地导出一份VP系统的数据库脚本,以前我都是通过工具直接导出,现在有同事说可以通过mysql的命令方式导出,我试了一下,可以,现在记录一下! 一:在MariaDB的安装目录下找 ...

  8. [PL/SQL]使用存储过程实现导出指定数据到文件(仿EXP)|转|

    源自 crkying:http://blog.csdn.net/edcvf3/article/details/8633247 由于EXP不能导出表的指定字段(其实也可通过CREATE TABLE  t ...

  9. 导出指定字符集dmp文件_Oracle 11G数据库导入导出终极解决方案

    Oracle 11G数据库导入导出终极解决方案 前言: 导出服务器:保持导出服务器的服务器和客户端字符集一致 导入服务器:保证导入的服务器和客户端字符集与导出服务器字符姐一致. 严格按照本文档操作,数 ...

  10. (C++)设计一个日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,包括某日期加上指定天数、某日期减去指定天数、两个日期相差的天数等。

    C++面向对象程序设计课后作业第239页第5题 题目要求:设计一个日期类Date,包括年.月.日等私有数据成员.要求实现日期的基本运算,包括某日期加上指定天数.某日期减去指定天数.两个日期相差的天数等 ...

最新文章

  1. 爬虫笔记:Python Selenium详解
  2. sublime text3支持Vue语法高亮显示步骤(转)
  3. 洛谷 P2513 [HAOI2009]逆序对数列
  4. 介绍一下再Apache下的Tomcat负载均衡的一些使用问题
  5. div生成图片_Vue生成分享海报(含二维码)
  6. 计算机网络学习笔记(26. Web缓存技术)
  7. f1ag_1s_h3re.php,攻防世界XCTF-WEB-新手练习区(1-3)
  8. 如何在 Mac 上使用“旁白实用工具”自定“旁白”?
  9. c语言开发视频监控系统,基于Crotex_A8平台的本地视频监控系统.doc
  10. 【分享】迅为iTOP4412开发板-Android系统屏幕旋转设置
  11. Windows下SVN提交模板制作及应用
  12. Educoder 二维码名片制作
  13. 深度学习环境安装之显卡驱动程序安装
  14. 将谷歌浏览器 Chrome 已安装的插件打包成 crx 给其它电脑离线安装 +【怎么安装Chrome插件】安装Chrome第三方插件
  15. 色环电阻阻值如何识别
  16. 安卓客户端开发!如何试出一个Android开发者真正的水平?分享PDF高清版
  17. linux教程第五版课后答案第六章,linux基础及应用第六章练习题
  18. hadoop 2.7.3 版本下载
  19. 《汇编语言》王爽(第四版) 第十六章 实验16
  20. 数组-leetcode#15-找出三个数之和等于0的所有不重复序列

热门文章

  1. 高阶的Parser:可变运算优先级
  2. 巧用金山网盾对付游戏插件强行锁定主页
  3. fm -rf 删除 恢复
  4. Linux教程+操作系统教程 -- 大全
  5. 通达OA2019版本全功能
  6. 初探Watir --- Ruby 自动化测试框架
  7. 条形码扫描仪行业调研报告 - 市场现状分析与发展前景预测
  8. 攻防世界 --> funny_video --> 最完整和正确的解答
  9. 虚拟打印机如何打印Text
  10. 2021-03-19