Effet
Exigence
Afin d'obtenir l'effet de rapport, j'ai défini mes propres exigences.
Il s’agit principalement d’idées. Une fois les idées claires, d’autres effets peuvent être obtenus.
Comptez combien de personnes arrivent en retard et partent tôt chaque jour de l'année.
Idée
Utiliser le langage PHP pour la mettre en œuvre.
Implémentez d'abord le style de rapport en utilisant HTML,
Utilisez ensuite la fonction d'en-tête PHP pour générer un téléchargement xls.
Points de connaissances
Fusion de colonnes et fusion de lignes dans des tableaux
PHP obtient chaque jour de l'année pour l'affichage
Fonction d'en-tête PHP
Fonction de modèle Smarty
Fonction personnalisée Smarty
...
Code PHP
public function export() { //获取2016年日期 $time_start = strtotime('2016-01-01'); $time_end = strtotime('2016-12-31'); $month_arr = []; $month_arr['month'][] = '2016-01'; $month_arr['numbers'][] = date('t',$time_start); //获取天数 while (($time_start = strtotime('+1 month', $time_start)) <= $time_end) { $month_arr['month'][] = date('Y-m',$time_start); //取得递增月 $month_arr['numbers'][] = date('t',$time_start); //获取天数 } function check_week($time = []) { if (empty($time['day'])) { return ''; } $w = intval(date('w' , strtotime($time['day']))); if( $w === 0 || $w === 6){ return '<td style="background-color: red;">' .date('d', strtotime($time['day'])) .'</td>'; } return '<td>'.date('d', strtotime($time['day'])).'</td>'; } //向模板中注册一个函数 $this->smarty->registerPlugin('function','check_week','check_week'); //模拟数据如下: $list[0]['name'] = 'Tom'; $list[1]['name'] = 'Joan'; $list[0]['sex'] = '男'; $list[1]['sex'] = '女'; $list[0]['age'] = '30'; $list[1]['age'] = '31'; //设置迟到 $list[0]['late'] = [ '2016-01-08', '2016-01-09', '2016-02-09', '2016-03-09', '2016-04-09', '2016-05-09' ]; $list[1]['late'] = [ '2016-02-12', '2016-03-15', '2016-04-13', '2016-05-19', '2016-05-19' ]; //设置早退 $list[0]['leave'] = [ '2016-03-09', '2016-04-11', '2016-05-15', '2016-06-18', '2016-07-21', '2016-08-23', '2016-09-22', '2016-10-20', '2016-11-17', '2016-12-14', ]; $list[1]['leave'] = [ '2016-05-09', '2016-06-11', '2016-07-13', '2016-08-15', '2016-09-17', '2016-10-19', '2016-11-20', '2016-12-23', '2016-03-18', '2016-02-19', '2016-01-23', ]; $file_name = "报表-".date("YmdHis",time()); $file_suffix = "xls"; header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=$file_name.$file_suffix"); $this->_assign('list', $list); $this->_assign('month', $month_arr); $this->_display(); }
Code HTML
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=utf-8"> <meta name=ProgId content=Excel.Sheet> <meta name=Generator content="Microsoft Excel 11"> </head> <body> <table border=1 cellpadding=0 cellspacing=0 width="100%"> <tr> <td style="vertical-align:middle;" align="center" rowspan="2"> <b>姓名</b> </td> <td style="vertical-align:middle;" align="center" rowspan="2"> <b>性别</b> </td> <td style="vertical-align:middle;" align="center" rowspan="2"> <b>年龄</b> </td> {if $month} {foreach $month.month as $k=>$m} <td style="text-align: center;" colspan="{$month.numbers.$k}"> <b>{$m}</b> </td> {/foreach} {/if} </tr> <tr> {if $month} {foreach $month.month as $k=>$m} {section name=count loop=$month.numbers.$k+1 start=1} {check_week day=$m|cat:"-"|cat:$smarty.section.count.index} {/section} {/foreach} {/if} </tr> {if $list} {foreach $list as $s} <tr> <td>{$s.name|default:'--'}</td> <td>{$s.sex|default:'--'}</td> <td>{$s.age|default:'--'}</td> {if $month} {foreach $month.month as $k=>$m} {section name=count loop=$month.numbers.$k+1 start=1} {if $smarty.section.count.index <10 } {$str = ""} {$smarty.section.count.index = $str|cat:"0"|cat:$smarty.section.count.index} {/if} <td style=" {if $s['late']} {if ($m|cat:"-"|cat:$smarty.section.count.index)|in_array:$s['late']} background-color: #5a0099; {/if} {/if} {if $s['leave']} {if ($m|cat:"-"|cat:$smarty.section.count.index)|in_array:$s['leave']} background-color: yellow; {/if} {/if} "> {if $s['late']} {if ($m|cat:"-"|cat:$smarty.section.count.index)|in_array:$s['late']} 1 {/if} {/if} {if $s['leave']} {if ($m|cat:"-"|cat:$smarty.section.count.index)|in_array:$s['leave']} 1 {/if} {/if} </td> {/section} {/foreach} {/if} </tr> {/foreach} <tr> <td style="background-color: red"></td> <td>*周末</td> </tr> <tr> <td style="background-color: white"></td> <td>*正常</td> </tr> <tr> <td style="background-color: #5a0099"></td> <td>*迟到</td> </tr> <tr> <td style="background-color: yellow"></td> <td>*早退</td> </tr> {/if} </table> </body> </html>
Ce qui précède est le rapport d'exportation PHP ( Case), veuillez faire attention au site Web PHP chinois (www.php.cn) pour plus de contenu connexe !