最近需要大数据导出,于是在网上找了一下,在这进行一下整理,希望可以帮助到大家。
在这里插入图片描述

一、PHP 自带函数 fputcsv 可以实现打印报表(Excel)功能
优点是:
1 执行效率高
2 不需要第三方库
3 用起来很方便
4 实时生成。用流的形式传输
缺点是:
1 在 Linux 执行后,下载到本地打开会乱码 那么可以用 iconv 函数进行转换
2 只支持csv格式,如果你的对报表格式要求不是很高,那么 fputcsv 是很好的选择
代码

public function doub_order_export()
    {

        set_time_limit(0);
        ini_set('memory_limit', '1024M');

//        $columns = [
//            '列名1', '列名2', '列名3'      //需要几列,定义好列名
//        ];

         $columns = array('订单编号', '课程编号', '课程名称', '订单金额', '支付金额', '支付类型', '手续费', '补贴金额', '下单时间', '支付时间', '机构编号', '机构名称', '信息延迟');

        //设置好告诉浏览器要下载excel文件的headers
        header('Content-Description: File Transfer');
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename="导出数据-'.date('Y-m-d', time()).'.xls"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        $fp = fopen('php://output', 'a');//打开output流
        mb_convert_variables('GBK', 'UTF-8', $columns);
        fputcsv($fp, $columns);//将数据格式化为CSV格式并写入到output流中

        $query = M("order")->join("left join doub_goods_extra on doub_order.goods_extra_id = doub_goods_extra.goods_extra_id")
            ->where(["order_status"=>["in","2,3"]])->field("order_id,goods_id,doub_order.goods_name,doub_order.order_price_new,doub_order.order_price_pay,
            doub_order.bank_card_type,doub_order.order_poundage_w,doub_order.poundage_num,order_c_time,order_pay_time,vendor_id,vendor_name,
            order_abnorma_status");
          //  exit($query);
        //添加查询条件,获取需要的数据
        //$query = Model::class()->where();

        //获取总数,分页循环处理
        $accessNum = M("order")->where(["order_status"=>["in","2,3"]])->count();

        $perSize = 1000;
        $pages   = ceil($accessNum / $perSize);

        for($i = 1; $i <= $pages; $i++) {

            //$db_data = $query->limit($perSize)->offset(($i-1)*$perSize)->get();
            $db_data =  M("order")->join("left join doub_goods_extra on doub_order.goods_extra_id = doub_goods_extra.goods_extra_id")
            ->where(["order_status"=>["in","2,3"]])->field("order_id,goods_id,doub_order.goods_name,doub_order.order_price_new,doub_order.order_price_pay,
            doub_order.bank_card_type,doub_order.order_poundage_w,doub_order.poundage_num,order_c_time,order_pay_time,vendor_id,vendor_name,
            order_abnorma_status")->limit(($i-1)*$perSize,$perSize)->order('order_id desc')->select();
           //ßßecho M("order")->_sql();
            foreach($db_data as $key => $value) {
                $rowData =$value;
               //var_dump($value);exit;

                //获取每列数据,转换处理成需要导出的数据
                //需要格式转换,否则会乱码
                mb_convert_variables('GBK', 'UTF-8', $rowData);
                fputcsv($fp, $rowData);
            }

            //释放变量的内存
            unset($db_data);

            //刷新输出缓冲到浏览器
            ob_flush();

            //必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
            flush();
        }

        fclose($fp);
        exit();
    }

二、PHP PHPExcel 包进行导入导出,这个比较普遍。就不多写了,附上几个网址。

1 https://blog.csdn.net/yanhui_wei/article/details/7930502

Logo

更多推荐