1、直接浏览器输出(后台使用可用_blank直接跳走):
protected function put_csv($list,$title)
    {
        set_time_limit(0);//防止超时
        //ini_set("memory_limit", "512M");//防止内存溢出
        $file_name = "exam".time().".csv";
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename='.$file_name );
        header('Cache-Control: max-age=0');
        $file = fopen('php://output',"a");
        $limit = 100000;
        $calc = 0;
        foreach ($title as $v){
            $tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);
        }
        fputcsv($file,$tit);
        foreach ($list as $v){
            $calc++;
            if($limit == $calc){
                ob_flush();
                flush();
                $calc = 0;
            }
            foreach($v as $t){
                $tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);
            }
            fputcsv($file,$tarr);
            unset($tarr);
        }
        unset($list);
        fclose($file);
        exit();
    }
public function daochu()
    {
        
        set_time_limit(0);//防止超时
        //ini_set("memory_limit", "512M");//防止内存溢出
        $headList = array('姓名', '电话', '密码', '新老');
        $dataList = Db::table('up_z_old_user')->field('u_name,u_phone,u_pass,u_old')
            ->page(1,100000)
            ->select();
        $this->put_csv($dataList, $headList);
    }
2、ajax直接保存然后返回路径(这个比较全,可以把要转换的字段对应关系做进去)
function exportExcel($file_name1,$file_name2,$title,$list,$status='',$values='')
{
    set_time_limit(0);//防止超时
    //ini_set("memory_limit", "512M");//防止内存溢出
    $date = date('Ymd');
    $dir = ROOT_PATH . 'public' . DS . 'excel/' . $date;
    if(!file_exists($dir)){
        //检查是否有该文件夹,如果没有就创建,并给予最高权限
        mkdir($dir, 0700,true);
    }
    $file_name = $file_name1 . $file_name2 . '.csv';
    $path = ("{$dir}/".iconv('UTF-8','gb2312',$file_name));
    $file = fopen($path, 'w');
    $limit = 100000;
    $calc = 0;
    foreach ($title as $v){
        $tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);
    }
    fputcsv($file,$tit);
    foreach ($list as $v){
        $calc++;
        if($limit == $calc){
            ob_flush();
            flush();
            $calc = 0;
        }
        foreach($v as $kk => $t){
            if($status){
                if(in_array($kk,$status) && isset($values[$kk][$t]) && $values[$kk][$t]){
                    $t = $values[$kk][$t];
                }
            }
            $tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);
        }
        fputcsv($file,$tarr);
        unset($tarr);
    }
    unset($list);
    fclose($file);
    $filePath = 'excel/' . $date . '/' . $file_name;
    $result = array( 'code' => 200, 'msg' =>"/".$filePath );
    return $result;
}
public function daochu()
    {
        set_time_limit(0);//防止超时
        //ini_set("memory_limit", "512M");//防止内存溢出
        if($data){
            $cellname = [
                '流水单号', '金额', '类型', '订单类型', '支付方式', '用户名称', '用户电话', '时间'
            ];
            $status = ['revenue_type','pay_type','revenue_one_type'];
            $values = [
                'revenue_type' => [1 => '收入',2 => '退款']
                ,'pay_type' => [1 => '微信',2 => '支付宝',3 => '银联']
                ,'revenue_one_type' => [1 => '自营订单',2 => '增补订单',3 => '统购订单',4 => '取消订单']
            ];
            $res = exportExcel('财务流水',date('Ymd'),$cellname,$data,$status,$values);
            return json($res);
        }else{
            return json(['code'=>0,'msg'=>'此条件下无数据']);
        }
    }

标签: none

添加新评论