TP5 生成excel并下载

public function excel(){
    /*检测用户是否登陆*/
    $user_id=Finance::islogin();
    if($user_id==0){
      $this->redirect('/index.php/index/User/login');
    }
    Loader::import('PHPExcel.Classes.PHPExcel');
    Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
    Loader::import('PHPExcel.Classes.PHPExcel.Reader.Excel5');

    $PHPExcel = new \PHPExcel(); //实例化一个要保存的phpExcel对象
    $PHPSheet = $PHPExcel->getActiveSheet();
    $PHPSheet->setTitle("piece"); //给当前活动sheet设置名称
    //接收值
    $daterange1 = input("daterange1");
    $daterange2 = input("daterange2");
    $merchant_name = input("merchant_name");
    //查询语句
    $platform = Db::name("platform")
    ->alias('a')
    ->join('order_addition b', 'a.merchant_name = b.DpName')
    ->join('order c', 'c.order_no = b.order_no')
    ->join('order_item d', 'c.order_id = d.order_id')
    ->where("a.merchant_name",$merchant_name)
    ->where('c.created_at', 'between', [$daterange1,$daterange2])
    ->field("b.orderId,c.created_at,d.title,d.prop_name")
    ->select();
    
    $i = 2;
    //标题行
    $PHPSheet->setCellValue("A1",'订单编号')->setCellValue("B1",'订单日期')->setCellValue("C1",'商品名称')->setCellValue("D1",'数量')->setCellValue("E1",'订单交易币种')->setCellValue("F1",'订单总金额')->setCellValue("G1",'收货地址')->setCellValue("H1",'收件人名称')->setCellValue("I1",'承认人')->setCellValue("J1",'物流编号');
    foreach ($platform as $k){
      // $ko = $k;
      //我的是三维数组
      $prop_name = json_decode($k["prop_name"],true);
      $t= "";
      if(is_Array($prop_name)){
        foreach($prop_name as $v){
          $v = join(",",$v);
          if($v=="常规属性"){
            $v = '';
          }
          $temp[] = $v;
          $t.="".$v."".",";
        }
      }
      $PHPSheet->setCellValue("A".$i,$k['orderId'])->setCellValue("B".$i,$k['created_at'])->setCellValue("C".$i,$k['title'].$t); //表格数据
      $i = $i+1;
    }
    
    // die();
    $PHPWriter = \PHPExcel_IOFactory::createWriter($PHPExcel,"Excel2007"); //创建生成的格式
    $file_dir = ROOT_PATH . 'public' . DS . 'static' . DS . 'uploads' . DS . 'factory' . DS . 'settlement' . DS . 'settlement.xlsx'; //文件存放目录
      
    $PHPWriter->save($file_dir); //表示在$path路径下面生成demo.xlsx文件
    // return true;
    $file_name = "settlement.xlsx"; //下载文件名
    $file_dir = ROOT_PATH . 'public' . DS . 'static' . DS . 'uploads' . DS . 'factory'  . DS . 'settlement' . DS; //下载文件存放目录
    //检查文件是否存在
    if(!file_exists($file_dir . $file_name)){
        // echo "文件找不到";
        return "文件找不到";
        exit();
    }else{
        //打开文件
        $file1 = fopen($file_dir . $file_name, "r");
        //输入文件标签
        Header("Content-type:application/vnd.ms-excel"); //表示输出的是excel文件
        Header("Accept-Ranges: bytes");
        Header("Accept-Disposition: attachment;filename=" . $file_name);
        ob_clean();
        flush(); //清除文件中多余的路径名以及解决乱码的问题
        echo fread($file1, filesize($file_dir . $file_name));
        fclose($file1);
        exit();
    }
    
  }
 
//前端点击下载即可
posted @ 2021-05-21 15:43  用代码砌墙的小白  阅读(561)  评论(0编辑  收藏  举报