资讯专栏INFORMATION COLUMN

PHP导出报表(案例)

jifei / 2302人阅读

摘要:效果需求为了实现报表效果,自己杜撰的需求。主要是思路,思路通了实现其他效果也。统计每个人在一年中每一天迟到早退的情况。首先将报表样式用实现,然后利用函数生成下载。

效果

需求

为了实现报表效果,自己杜撰的需求。

主要是思路,思路通了实现其他效果也OK。

统计每个人在一年中每一天迟到早退的情况。

思路

PHP 语言进行实现。

首先将报表样式用 HTML 实现,

然后利用PHP header 函数生成 xls 下载。

知识点

表格中的列合并与行合并

PHP 获取一年中的每一天进行展示

PHP header 函数

Smarty 模板函数

Smarty 自定义函数

...

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 "".date("d", strtotime($time["day"]))."";
        }
        return "".date("d", strtotime($time["day"]))."";
    }

    //向模板中注册一个函数
    $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();
}

HTML 代码




    
    
    




        {if $month}
            {foreach $month.month as $k=>$m}
                
            {/foreach}
        {/if}
    
        {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}
    

    {if $list}
    {foreach $list as $s}
    
        {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}
                

            {/section}
        {/foreach}
        {/if}
    
    {/foreach}
    
    {/if}
姓名 性别 年龄{$m}
{$s.name|default:"--"} {$s.sex|default:"--"} {$s.age|default:"--"} {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}
*周末
*正常
*迟到
*早退

拓展阅读

PHP导出带样式的Excel

PHP header 的几种用法

Smarty 模板函数


Thanks ~

欢迎关注公众号,一起学习讨论。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22284.html

相关文章

  • 前端小案例

    摘要:谨以此文我在北京一家公司打工两个月,昨夜露宿街头我是一名程序员,在北京打工两个月,如今身上只剩吃碗面条的钱。昨夜在北京寒冷的公园和同事与流浪汉一起露宿一夜,因为我们被老板拖欠了工资。我在两个多月前,前往北京。 你可能不知道的 14 个 JavaScript 调试技巧 了解你的工具可以在完成任务的过程中发挥重大作用。尽管传言 JavaScript 难以调试,但是如果你掌握了一些调试技巧,...

    codeGoogle 评论0 收藏0
  • 纯前端开发案例:用 SpreadJS 搭建信息系统软件开发平台

    摘要:葡萄城的是一个基于技术的纯控件,控件性能流畅,有类似的在线表格编辑器,适合非专业程序员设计报表模板,很符合平台部分无编码开发的理念。葡萄城控件产品对于项目的价值控件主要用于本项目中的报表设计,展示,打印等功能。 showImg(https://segmentfault.com/img/bVbalYk?w=1000&h=400); 华闽通达 - R 平台应用所使用产品:SpreadJS ...

    Heier 评论0 收藏0
  • 基于haddop的HDFS和Excel开源库POI导出大数据报表(一)

    摘要:说明这里用到的项目都是基于的项目。但同时,它和其他的分布式文件系统的区别也是很明显的。能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。放宽了一部分约束,来实现流式读取文件系统数据的目的。是项目的一部分。 关键词 Java、PHP、hdfs、mqrocket、excel、poi、报表 需求背景 在业务需求方面,每个企业或多或少都会有报表导出的作业,量少则可是使用输出流或者字符串的...

    Nekron 评论0 收藏0
  • 基于haddop的HDFS和Excel开源库POI导出大数据报表(一)

    摘要:说明这里用到的项目都是基于的项目。但同时,它和其他的分布式文件系统的区别也是很明显的。能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。放宽了一部分约束,来实现流式读取文件系统数据的目的。是项目的一部分。 关键词 Java、PHP、hdfs、mqrocket、excel、poi、报表 需求背景 在业务需求方面,每个企业或多或少都会有报表导出的作业,量少则可是使用输出流或者字符串的...

    luffyZh 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<