thinkphp中用PHPExcel导出excel表—ajax方法

首先在前台html页面中点击某个控件来导出excel,这里用ajax的click方法实现实现点击事件,那怎么跟PHPExcel联系起来呢,请看代码:

HTML中jQ部分:

//导出excel
$("#daochu").click(function(){
    var vkorg = $("#VKORG option:selected").val();
    if(vkorg == ""){
        var vkorgs = $("#VKORG option").map(function(){
            return $(this).val();
        }).get().join(",");
        vkorg = vkorgs;
    }
    var kkber = $("#KKBER option:selected").val();
    var kunnr = $("input[name='Kunnr']").val();
    var name1 = $("input[name='Name1']").val();
    var ym1 = $("input[name='YM1']").val();
    var ym2 = $("input[name='YM2']").val();
    $.ajax({
        type:'post',
        url:"{:U('OrderReleasReport/getexcel')}",
        data:{vkorg:vkorg,kkber:kkber,kunnr:kunnr,name1:name1,ym1:ym1,ym2:ym2},
        datatype:'json',
        success:function(data){
            location.href="../"+data.url;
        }
    })
})

将获取的值通过ajax传到后台,根据条件来查询相应的数据:

//导出excel
public function getexcel(){
    $vkorg = $_POST['vkorg'];
    $kkber = $_POST['kkber'];
    $kunnr = $_POST['kunnr'];
    $name1 = $_POST['name1'];
    $ym1 = $_POST['ym1'];
    $ym2 = $_POST['ym2'];
    $where = " and 1=1 ";
    if(!empty($vkorg)){
        $where .= " and a.vkorg in ('".$vkorg."')";
    }

    if(!empty($kkber)){
        $where .= " and a.kkber='".$kkber."'";
    }
    if(!empty($kunnr)){
        $where .= " and a.kunnr like '%".$kunnr."%'";
    }
    if(!empty($name1)){
        $where .= " and a.Name1 like '%".$name1."'";
    }
    if(!empty($ym1)){
        $where .= " and  ApplyDate >= '".$ym1."'";
    }
    if(!empty($ym2)){
        $where .= " and ApplyDate <= '".$ym2."'";
    }
    $expTitle = "放货查询";
    $expCellName = array(
        array('KKBER','信控范围'),
        array('Kunnr','客户代码'),
        array('name1','客户名称'),
        array('ApplyDate','申请日期'),
        array('Amount','订单金额'),
        array('Amount','最终审批人'),
        array('Amount','审批意见'),
        array('Amount','备注'),
    );
    $expTableData = M()->query("select row_number() OVER (order by a.vkorg,a.kkber,a.kunnr) as rn,a.*,b.name1 from TB_REPORT_OrderApplication2 a inner join tb_crm_kna1 b on a.kunnr=b.kunnr where 1>0 $where");
    $this->exportExcel($expTitle,$expCellName,$expTableData);
}

再调用exportExcel方法:

//PHPExcel导入导出的方法
protected function exportExcel($expTitle,$expCellName,$expTableData){
   $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
   $fileName = time();//导出excal 文件名称
   $cellNum = count($expCellName);//有多少列
   $dataNum = count($expTableData);//有多少行
   vendor("Excel.PHPExcel");//引入PHPExcel文件
   ini_set("memory_limit", "1024M");
   $objPHPExcel = new \PHPExcel();//实例化PHPExcel类库,相当于新建一个Excel表
   $cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
         'P','Q','R','S','T','U','V','W','X','Y','Z', 'AA','AB','AC','AD','AE',
         'AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT',
         'AU','AV','AW','AX','AY','AZ');
   //在第二行插入每列的标题
   for($i=0;$i<$cellNum;$i++){
      $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'1', $expCellName[$i][1]);
   }
   //从第三行开始插入数据
   for($i=0;$i<$dataNum;$i++){
      for($j=0;$j<$cellNum;$j++){
         $objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+2), $expTableData[$i][$expCellName[$j][0]]);
      }
   }
   $objSheet = $objPHPExcel->getActiveSheet();//获取当前活动sheet
   $objSheet->setTitle('sheet1');//给当前的活动sheet起个名称
   header('pragma:public');
   header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xlsx"');
   header("Content-Disposition:attachment;filename=$fileName.xlsx");//attachment新窗口打印inline本窗口打印
   header('Cache-Control: max-age=0');
   $objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
   $response = array(
         'success' => true,
         'url' => $this->saveExcelToLocalFile($objWriter, $fileName)
   );
   if ($response) {
      $this->ajaxReturn($response, "json");
   }
}

得到文件名再来拼接文件的路径,并将其保存:

//ajax导出用到的方法
function saveExcelToLocalFile($objWriter,$filename){
   $filePath = './Public/excel/'.$filename.'.xlsx';
   $objWriter->save($filePath);
   return $filePath;
}

这样用ajax传递参数实现excel文件的导出就实现了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值