zoukankan      html  css  js  c++  java
  • 批量条件导出之---CSV

    1.写公共方法

    <?php
    
    namespace util;
    
    use Exception;
    
    /**
     * 导出csv
     * @author 6c696e676a696177656e
     */
    class ExportCsv
    {
        
        public $num = 0;
    
        private $fp = null;
        private $head = [];
        private $is_header = false;
    
        public function __construct()
        {
            //打开PHP文件句柄,php://output 表示直接输出到php缓存
            $this->fp = fopen('php://output', 'w');
        }
    
        //设置头部
        public function setHead($head,$filename = 'export')
        {
            if (!is_array($head)) {
                throw new Exception('head格式不正确');
            }
            //error_reporting(0);
            header("Content-type:text/csv;charset=gbk"); //application/vnd.ms-excel
            header("Content-Disposition:attachment;filename={$filename}.csv");
            header('Cache-Control:must-revalidate,post-check=0,pre-check=0,max-age=0');
            header('Expires:0');
            header('Pragma:public');
    
            //输出Excel列名信息
            foreach ($head as $key => $arr_key) {
                //CSV的Excel支持GBK编码,一定要转换,否则乱码
                $csv_head[] =  mb_convert_encoding($key, 'GBK', 'UTF-8');
                $this->head[] = $arr_key;
            }
            //将数据通过fputcsv写到文件句柄
            fputcsv($this->fp, $csv_head);
            $this->is_header = true;
        }
    
        //采用putcsv封装格式
        public function output(array $data)
        {
            if (!$this->is_header) {
                throw new Exception('未设置head');
            }
            $row = [];
            foreach ($this->head as $arr_key) {
                //CSV的Excel支持GBK编码,一定要转换,否则乱码
                $row[] = mb_convert_encoding(@$data[$arr_key], 'GBK', 'UTF-8');
            }
            fputcsv($this->fp, $row);
            ++$this->num;
        }
    
        //刷新缓存,将PHP的输出缓存输出到浏览器上
        public function flush(&$csv_line)
        {
            ob_flush();
            flush();
            $csv_line = 0;
        }
    
        //关闭输出流
        public function close()
        {
            fclose($this->fp);
        }
    }

    2.调用

    <?php
    // +----------------------------------------------------------------------
    // | 功能描述: 
    // +----------------------------------------------------------------------
    // | Author: Jimlin <lj.xia@163.com>
    // +----------------------------------------------------------------------
    // | Datetime: 2020/1/13 17:40
    // +----------------------------------------------------------------------
    
    namespace appadmincontroller;
    
    use appcommoncontrollerBase;
    use appcommonmodelRechargeOrder as RechargeOrderModel;
    use appcommonmodelUser;
    use thinkexceptionDbException;
    use utilExportCsv;
    
    /**
     * 充值订单控制器
     * Class RechargeOrder
     * @package appadmincontroller
     */
    class RechargeOrder extends Base
    {
        /**
         * 模型
         * @var RechargeOrderModel
         */
        protected $model;
    
        /**
         * RechargeOrder constructor.
         * @param RechargeOrderModel $model
         */
        public function __construct(RechargeOrderModel $model)
        {
            parent::__construct();
            $this->model = $model;
        }
    
        }
        /**
         * @description: 导出详情
         * 
         */   
        public function export()
        {
            set_time_limit(0);
            $csv = new ExportCsv();
    
            $this->page = 1;
            $this->listRows = 5000;
         
            $csv->setHead(
                [
                    'ID'       => 'id',
                    '订单编号'  => 'order_no',
                    '用户昵称'  => 'user',
                    '充值金额'  => 'price',
                    '生成时间'  => 'create_time',
                    '支付状态'  => 'pay_status_text'
                ],
                'export_' . date('YmdHis')
            );
    
            $data = true;
            $line = 1;
            try {
                while ($data) {
                    /**
                     * 获取数据
                     */
                    $with = ['user'];
                    $order = 'id desc';
    
                    $list = $this->model->customPaginate($this->requestQuery, $order, $with)->append(['pay_status_text'])->toArray();
                    $data = $list['data'] ?? [];
                    /**
                     * 输出数据
                     */
                    foreach ($data as $v) {
                        $v['user'] = $v['user']['nickname'] ?? '';
                        $csv->output($v);
                    }
                    $csv->flush($line);
                    $this->page += 1;
                }
            } catch (Throwable $th) {
                
            }
            $csv->close();
        } 
    }
  • 相关阅读:
    学习官方示例 System.Assigned
    用 TBytesStream 类实现的读文件为十六进制字符的函数
    学习官方示例 System.Hi、System.Lo
    给 TComboBox 添加图标 回复 "heyongan" 的问题
    [每周特惠]WPF编程(第二版) + 设计模式—基于C#的工程化实现及扩展
    【公告】8月28日(周六)早上5:007:00服务器升级
    【网站公告】新Web服务器上线
    欢迎参加上海张江浦东软件园以及分园的技能培训课程
    上周热点回顾(8.309.5)
    上周热点回顾(8.168.22)
  • 原文地址:https://www.cnblogs.com/silen0119/p/13944346.html
Copyright © 2011-2022 走看看