原生php导出excle

      //连接数据库
            @$link = mysql_connect("localhost","appsf007","b2h#jz!K");
            //链接数据库不成功,抛出错误
            if(!$link){
                die('Could not connect: ' . mysql_error());
            }
            //选择数据库
            mysql_select_db("appsf007", $link);
            //设置字符集为utf-8
            mysql_query("set names 'utf8'");
            //设置脚本最大执行时间(默认为30秒)
            set_time_limit(100);
            //设置时区为中国
            date_default_timezone_set("PRC");
            //屏蔽Notice错误
      //$order = M('order');
      $ks_time = I('ks_time');
      $js_time = I('js_time');
      
      //输出Excel文件头,可把user.csv换成你要的文件名
    
      // 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可
      if($ks_time && $js_time){
      // $sql = "select * from al_order where addtime between '{$ks_time}' and 2100-1-1";  
      $sql = "SELECT order_id,order_num,user_name,mobile,order_name,order_type,order_zhifubao,f_order_time,s_order_time,order_amount,state  FROM nv_order WHERE f_order_time BETWEEN '{$ks_time}' AND '{$js_time}'";
        // echo $sql;
       
      }else if($ks_time){
         $sql = "SELECT order_id,order_num,user_name,mobile,order_name,order_type,order_zhifubao,f_order_time,s_order_time,order_amount,state  FROM nv_order WHERE f_order_time BETWEEN '{$ks_time}' AND '2100-01-01'";
      // echo $sql;
      }else{
        $sql = "SELECT order_id,order_num,user_name,mobile,order_name,order_type,order_zhifubao,f_order_time,s_order_time,order_amount,state FROM nv_order WHERE 1 = 1";
        //echo $sql;
      }

      $is = mysql_query($sql);
      $row_row = mysql_fetch_assoc($is);
      
      if(!$row_row){
      $this->error('没有数据');
      }

      header('Content-Type: application/vnd.ms-excel');
      header('Content-Disposition: attachment;filename="order.csv"');
      header('Cache-Control: max-age=0');
      // 打开PHP文件句柄,php://output 表示直接输出到浏览器
      $fp = fopen('php://output', 'a');
      // 输出Excel列名信息
      $head = array('序号','订单号','昵称','手机号','订单名称','支付方式','支付宝交易号','交易起始时间','交易结束时间','充值金额','是否交易成功');
      foreach ($head as $i => $v) {
      // CSV的Excel支持GBK编码,一定要转换,否则乱码
      $head[$i] = iconv('utf-8', 'gbk', $v);
      }
      // 将数据通过fputcsv写到文件句柄
      fputcsv($fp, $head);
      // 计数器
      $cnt = 0;
      $num = 0;
      // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
      $limit = 100000;
      // //逐行取出数据,不浪费内存
      $query = mysql_query($sql);
      while ($row = mysql_fetch_assoc($query)) {
      $cnt ++;
      if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
      ob_flush();
      flush();
      $cnt = 0;
      }
     

      if($row['type'] != 693){   //693是推荐表删除的数据

         $num ++;
         $row['order_id'] = $num; /// 把order_id变成排序
         $row['order_amount'] = '¥'.$row['order_amount'];
         $row['order_zhifubao'] = '‘'.$row['order_zhifubao']; 
         if($row["state"] == 1){
          $row["state"] = '交易成功';
         }else{
          $row["state"] = '交易失败';
         }
         unset($row['type']);   //不要删除
         $new_row = $this->toIndexArr($row);
      }
       
     

       foreach ($new_row as $i => $v) {
       $new_row[$i] = iconv('utf-8', 'gbk', $v);
       }

      fputcsv($fp, $new_row);
      }
   }

   //关联变索引数组  不要删除
   function toIndexArr($arr){
    $i=0;
    foreach($arr as $key => $value){
        $newArr[$i] = $value;
        $i++;
    }
    return $newArr;
    }

猜你喜欢

转载自blog.csdn.net/weixin_40896800/article/details/82501222