ajax请求excel返回文件流问题

浏览:2427 发布日期:2019/07/03 分类:技术分享 关键字: ajax,excel
public function taskResultExport()
    {
        $ids = input('post.');
        $where = [];
        $where['l.id'] = ['in',$ids['id']];
        $data = Db::table('cti_notifycalllog')
            ->alias('l')
            ->join('cti_notifyinfo i', 'l.notifyid = i.id' ,'LEFT')
            ->where($where)
            ->field('l.*,i.name')
            ->select();
        vendor("PHPExcel.PHPExcel");
        $objPHPExcel = new \PHPExcel();
        $PHPSheet = $objPHPExcel->getActiveSheet();
        $PHPSheet->setTitle("任务结果");
        $PHPSheet->setCellValue("A1", "编号")
            ->setCellValue("B1", "操作标记")
            ->setCellValue("C1", "任务ID")
            ->setCellValue("D1", "号码")
            ->setCellValue("E1", "呼叫结果")
            ->setCellValue("F1", "开始时间")
            ->setCellValue("G1", "振铃时间")
            ->setCellValue("H1", "应答时间")
            ->setCellValue("I1", "结束时间")
            ->setCellValue("J1", "话单ID")
            ->setCellValue("K1", "挂机原因")
            ->setCellValue("L1", "任务名称");
        $PHPSheet->getColumnDimension('A')->setWidth(10);//设置宽度
        $PHPSheet->getColumnDimension('B')->setWidth(15);//设置宽度
        $PHPSheet->getColumnDimension('C')->setWidth(15);//设置宽度
        $PHPSheet->getColumnDimension('D')->setWidth(15);//设置宽度
        $PHPSheet->getColumnDimension('E')->setWidth(15);//设置宽度
        $PHPSheet->getColumnDimension('F')->setWidth(25);//设置宽度
        $PHPSheet->getColumnDimension('G')->setWidth(25);//设置宽度
        $PHPSheet->getColumnDimension('H')->setWidth(25);//设置宽度
        $PHPSheet->getColumnDimension('I')->setWidth(25);//设置宽度
        $PHPSheet->getColumnDimension('J')->setWidth(25);//设置宽度
        $PHPSheet->getColumnDimension('K')->setWidth(25);//设置宽度
        $PHPSheet->getColumnDimension('L')->setWidth(25);//设置宽度
        //左对齐
        $PHPSheet->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('B')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('G')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('H')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('I')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('J')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('K')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
        $PHPSheet->getStyle('L')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);

        $d = 2;
        foreach($data as $k=>$v){
            switch ($v['callresult']) {
                case 1:
                    $data[$k]['callresult'] = '振铃';
                    break;
                case 2:
                    $data[$k]['callresult'] = '应答';
                    break;
                case 3:
                    $data[$k]['callresult'] = '转坐席';
                    break;
                default:
                    $data[$k]['callresult'] = '没振铃';
            }
            $PHPSheet->setCellValue("A".$d,$v['id'])
                ->setCellValue("B".$d,$v['optflag'])
                ->setCellValue("C".$d,$v['notifyid'])
                ->setCellValue("D".$d,$v['telno'])
                ->setCellValue("E".$d,$v['callresult'])
                ->setCellValue("F".$d,$v['starttime'])
                ->setCellValue("G".$d,$v['acmtime'])
                ->setCellValue("H".$d,$v['anctime'])
                ->setCellValue("I".$d,$v['endtime'])
                ->setCellValue("J".$d,$v['cdrid'])
                ->setCellValue("K".$d,$v['hangupcause'])
                ->setCellValue("L".$d,$v['name']);
            $d++;
        }
        $filename = time();
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="' . $filename . '.xlsx"');
        header('Cache-Control: max-age=0');
        //生成xlsx文件并存入当前文件目录
        //文件的位置很重要
        function saveExcelToLocalFile($objWriter,$filename){
            // make sure you have permission to write to directory
            $filePath = $filename.'.xlsx';
            $objWriter->save('excelExport/'.$filePath);
            return $filePath;
        }
        //返回已经存好的文件目录地址提供下载
        $objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
        $url = saveExcelToLocalFile($objWriter,$filename);
        if ($url){
            self::toJson(200,$url);
        }else{
            self::toJson(400,'导出失败');
        }
    }
//前端JS
function resultExport() {
    if(str_id = checked()){
        layer.confirm('确认要导出吗?',function(index){
            $.ajax({
                type: 'POST',
                data:{id:str_id},
                url: "{:url('taskResultExport')}",
                dataType: 'json',
                success: function(data){
                    if (data.code == 200){
                        console.log(data.msg);
                        document.location.href = ("/excelExport/" + data.msg);
                        layer.msg(data.msg,{icon:1,time:1000});
                    }else{
                        layer.msg(data.msg,{icon:0,time:1000});
                    }
                },
                error:function(data) {
                    console.log(data.msg);
                },
            });
        });
    }
}
最佳答案
评论( 相关
后面还有条评论,点击查看>>