前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Thinkpgp5.1根据多条件和时间筛选查询数据,并导出Excel相应表格数据

Thinkpgp5.1根据多条件和时间筛选查询数据,并导出Excel相应表格数据

作者头像
程序猿的栖息地
发布2022-04-29 14:13:36
1K0
发布2022-04-29 14:13:36
举报
文章被收录于专栏:程序猿的栖息地

作者:阿dai哥

教程分享

Tutorial to share

网络上关于Thinkphp5的教程非常多,从基础到实战,从简单到困难,应有尽有。以后我会在每天给大家分享一些项目实战的功能点,这些功能点都是我平时开发用到的,如果写的不好还望您指出来,大家一起学习交流。每天只需花2分钟的时间就可以丰富自己的知识和提高专业技能。

分享效果说明

Share the body

这是一个使用Thinkphp5导出Excel表格数据的功能,Thinkphp我用的是5.1的版本。只需要写一个函数就可以导出Excel,全网最简单使用的方法,没有之一。😂😂😂

1、html页面布局效果(代码就不贴出来了)

2、导出数据的Excel表格效果图

实现代码

The implementation code

由于我使用的是Thinkphp5框架实现的效果,所以开发先composer一下要用到的Excel包。

代码语言:javascript
复制
"require": {
    "php": ">=5.4.0",
    "topthink/framework": "5.0.*",
    "phpoffice/phpexcel": "^1.8"
},

然后在common.php全局函数中写一个导出Excel类,这个很关键。整合过程主要是围绕当前类展开,这个类也很简单,稍微优点基础的人都能看得懂。下面就把代码贴出来来,直接拿过去就能用,什么都不需要改。

代码语言:javascript
复制
/**
 * excel表格导出
 * @param string $fileName 文件名称
 * @param array $headArr 表头名称
 * @param array $data 要导出的数据
 * @author static7  */
function excelExport($fileName = '', $headArr = [], $data = []) {
    $fileName .= "_" . date("Y_m_d", time()) . ".xls";
    $objPHPExcel = new \PHPExcel();
    $objPHPExcel->getProperties();
    $key = ord("A"); // 设置表头
    foreach ($headArr as $v) {
        $colum = chr($key);
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);
        $key += 1;
    }
    $column = 2;
    $objActSheet = $objPHPExcel->getActiveSheet();
    foreach ($data as $key => $rows) { // 行写入
        $span = ord("A");
        foreach ($rows as $keyName => $value) { // 列写入
            $objActSheet->setCellValue(chr($span) . $column, $value);
            $span++;
        }
        $column++;
    }
    $fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表
    $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
    header('Content-Type: application/vnd.ms-excel');
    header("Content-Disposition: attachment;filename=$fileName");
    header('Cache-Control: max-age=0');
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output'); // 文件通过浏览器下载
    exit();
}

如何使用这个类呢?这个就更简单了,只要在你的控制器需要的地方直接引用当前的方法就可以了,根据上面的效果图,我的实现逻辑是这样的。在控制器中写一个 excel_class_save 的方法,根据相关的逻辑写代码就可以了,就是这么简单。当然只是实现功能而已,如果要做更好的优化性能请根据自己的需要相应的优化即可。

代码语言:javascript
复制
public function excel_class_save(Request $request)
{
    $map = [];
    $data = $this->request->param();
    if(!empty($data['token'])){
        $map['token'] = $data['token'];
    }
    if(!empty($data['domain'])){
        $map['domain'] = $data['domain'];
    }
    if(!empty($data['pathname'])){
        $map['pathname'] = $data['pathname'];
    }
    
    if($data['start_time'] && $data['end_time']){
        $start_time = strtotime($data['start_time']);
        $end_time = strtotime($data['end_time']) + 86300;
        $list = OrderModel::order('create_at DESC')
            ->whereTime('create_at', 'between', [$start_time, $end_time])
            ->where($map)
            ->field('name, phone, address, domain, pathname, ip, create_at as times, time_id')
            ->select();
    } else{
        $list = OrderModel::order('create_at DESC')
            ->where($map)
            ->field('name, phone, address, domain, pathname, ip, create_at as times, time_id')
            ->select();
    }
    $list = json_decode( json_encode( $list),true);
    $header = ['姓名', '手机号码', '详细地址', 'URL', '渠道', 'IP', '下单时间', '接听时段'];
    excelExport('下单列表', $header, $list);
}

到了这里整个实现的逻辑都完成了,是不是很简单呀!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿的栖息地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档