PHPExcel与ajax结合进行文件下载

        由于项目需要,今天用ajax结合PHPExcel进行文件下载,从官网下载了PHPExcel的样例代码并结合自己的实际需求加上数据库代码后,运行可以下载excel,但是我加上ajax代码后请求返回用调试工具查看一直是一堆乱码,返回也一直报error,又用$get直接请求传入参数,excel也可正常下载,百思不得起解,翻墙google一番,stackoverflow上多位大神给出了解答,下面贴出我的代码。其中最下面的两行代码非常关键,就是要生成该文件并直接存储于当前目录,返回文件的下载地址,前台ajax成功返回后,通过返回的地址进行文件下载,PHPexcel不可以通过ajax直接下载,否则就会出现我上面的情况,返回的一堆乱码其实就是返回的excel。

<?php
error_reporting(E_ALL);
date_default_timezone_set('Asia/Shanghai');
include '../Classes/PHPExcel.php';
$conn = @mysql_connect(数据库连接参数) or die("数据库连接失败!");
mysql_select_db("数据库名称",$conn);               //连接数据库
mysql_set_charset("utf8",$conn);

$starttime = isset($_POST['starttime']) ? mysql_real_escape_string($_POST['starttime']) : '';
$endtime = isset($_POST['endtime']) ? mysql_real_escape_string($_POST['endtime']) : '';
$fbnum = isset($_POST['fbnum']) ? mysql_real_escape_string($_POST['fbnum']) : '';
$table="fubiaoold";
$where="日期时间 >'$starttime' and 日期时间 <'$endtime';

$sql = mysql_query("select * from ".$table." where ".$where);    //查询sql语句



$objPHPExcel=new PHPExcel();
$objPHPExcel->getProperties()->setCreator('http://www.phpernote.com')
							 ->setLastModifiedBy('http://www.phpernote.com')
							 ->setTitle('Office 2007 XLSX Document')
							 ->setSubject('Office 2007 XLSX Document')
							 ->setDescription('Document for Office 2007 XLSX, generated using PHP classes.')
							 ->setKeywords('office 2007 openxml php')
							 ->setCategory('Result file');
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1','ID')
            ->setCellValue('B1','日期时间')
            ->setCellValue('C1','浮标号')
            ->setCellValue('D1','浮标电压')
            ->setCellValue('E1','纬度')
            ->setCellValue('F1','经度')
            ->setCellValue('G1','安全')
            ->setCellValue('H1','能见度')
            ->setCellValue('I1','最大风速')
            ->setCellValue('J1','最大风向')
            ->setCellValue('K1','最大风时')
            ->setCellValue('L1','风速')
            ->setCellValue('M1','风向')
            ->setCellValue('N1','气压')
            ->setCellValue('O1','气温')
            ->setCellValue('P1','湿度')
            ->setCellValue('Q1','雨量')
            ->setCellValue('R1','水温')
            ->setCellValue('S1','盐度')
            ->setCellValue('T1','叶绿素')
            ->setCellValue('U1','浊度')
            ->setCellValue('V1','平均波高')
            ->setCellValue('W1','平均波周期')
            ->setCellValue('X1','最大波高')
            ->setCellValue('Y1','最大波周期')
            ->setCellValue('Z1','十分之一波高')
            ->setCellValue('AA1','十分之一波周期')
            ->setCellValue('AB1','有效波高')
            ->setCellValue('AC1','有效波周期')
            ->setCellValue('AD1','波个数')
            ->setCellValue('AE1','0度波向出现率')
            ->setCellValue('AF1','22.5度波向出现率')
            ->setCellValue('AG1','45度波向出现率')
            ->setCellValue('AH1','67.5度波向出现率')
            ->setCellValue('AI1','90度波向出现率')
            ->setCellValue('AJ1','112.5度波向出现率')
            ->setCellValue('AK1','135度波向出现率')
            ->setCellValue('AL1','157.5度波向出现率')
            ->setCellValue('AM1','180度波向出现率')
            ->setCellValue('AN1','202.5度波向出现率')
            ->setCellValue('AO1','225度波向出现率')
            ->setCellValue('AP1','247.5度波向出现率')
            ->setCellValue('AQ1','270度波向出现率')
            ->setCellValue('AR1','292.5度波向出现率')
            ->setCellValue('AS1','315度波向出现率')
            ->setCellValue('AT1','337.5度波向出现率')
            ->setCellValue('AU1','流速1')
            ->setCellValue('AV1','流向1')
            ->setCellValue('AW1','流速2')
            ->setCellValue('AX1','流向2')
            ->setCellValue('AY1','流速3')
            ->setCellValue('AZ1','流向3')
            ->setCellValue('BA1','流速4')
            ->setCellValue('BB1','流向4')
            ->setCellValue('BC1','流速5')
            ->setCellValue('BD1','流向5')
            ->setCellValue('BE1','流速6')
            ->setCellValue('BF1','流向6')
            ->setCellValue('BG1','流速7')
            ->setCellValue('BH1','流向7')
            ->setCellValue('BI1','流速8')
            ->setCellValue('BJ1','流向8')
            ->setCellValue('BK1','流速9')
            ->setCellValue('BL1','流向9')
            ->setCellValue('BM1','流速10')
            ->setCellValue('BN1','流向10')
            ->setCellValue('BO1','流速11')
            ->setCellValue('BP1','流向11')
            ->setCellValue('BQ1','流速12')
            ->setCellValue('BR1','流向12')
            ->setCellValue('BS1','流速13')
            ->setCellValue('BT1','流向13')
            ->setCellValue('BU1','流速14')
            ->setCellValue('BV1','流向14')
            ->setCellValue('BW1','流速15')
            ->setCellValue('BX1','流向15')
            ->setCellValue('BY1','流速16')
            ->setCellValue('BZ1','流向16')
            ->setCellValue('CA1','流速17')
            ->setCellValue('CB1','流向17')
            ->setCellValue('CC1','流速18')
            ->setCellValue('CD1','流向18')
            ->setCellValue('CE1','流速19')
            ->setCellValue('CF1','流向19')
            ->setCellValue('CG1','流速20')
            ->setCellValue('CH1','流向20')
            ->setCellValue('CI1','流速21')
            ->setCellValue('CJ1','流向21')
            ->setCellValue('CK1','流速22')
            ->setCellValue('CL1','流向22')
            ->setCellValue('CM1','流速23')
            ->setCellValue('CN1','流向23')
            ->setCellValue('CO1','流速24')
            ->setCellValue('CP1','流向24')
            ->setCellValue('CQ1','流速25')
            ->setCellValue('CR1','流向25');
      
			
$i=2;                //定义一个i变量,目的是在循环输出数据是控制行数
 while($rs=mysql_fetch_array($sql)){
 
      $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue("A".$i, $rs[0])
            ->setCellValue("B".$i, $rs[1])
            ->setCellValue("C".$i, $rs[2])
            ->setCellValue("D".$i, $rs[3])          
            ->setCellValue("E".$i, $rs[4])          
            ->setCellValue("F".$i, $rs[5])          
            ->setCellValue("G".$i, $rs[6])          
            ->setCellValue("H".$i, $rs[7])          
            ->setCellValue("I".$i, $rs[8])          
            ->setCellValue("J".$i, $rs[9])          
            ->setCellValue("K".$i, $rs[10])          
            ->setCellValue("L".$i, $rs[11])          
            ->setCellValue("M".$i, $rs[12])          
            ->setCellValue("N".$i, $rs[13])          
            ->setCellValue("O".$i, $rs[14])          
            ->setCellValue("P".$i, $rs[15])          
            ->setCellValue("Q".$i, $rs[16])          
            ->setCellValue("R".$i, $rs[17])          
            ->setCellValue("S".$i, $rs[18])          
            ->setCellValue("T".$i, $rs[19])          
            ->setCellValue("U".$i, $rs[20])          
            ->setCellValue("V".$i, $rs[21])          
            ->setCellValue("W".$i, $rs[22])          
            ->setCellValue("X".$i, $rs[23])          
            ->setCellValue("Y".$i, $rs[24])          
            ->setCellValue("Z".$i, $rs[25])          
            ->setCellValue("AA".$i, $rs[26])          
            ->setCellValue("AB".$i, $rs[27])          
            ->setCellValue("AC".$i, $rs[28])          
            ->setCellValue("AD".$i, $rs[29])          
            ->setCellValue("AE".$i, $rs[30])          
            ->setCellValue("AF".$i, $rs[31])          
            ->setCellValue("AG".$i, $rs[32])          
            ->setCellValue("AH".$i, $rs[33])          
            ->setCellValue("AI".$i, $rs[34])          
            ->setCellValue("AJ".$i, $rs[35])          
            ->setCellValue("AK".$i, $rs[36])          
            ->setCellValue("AL".$i, $rs[37])          
            ->setCellValue("AM".$i, $rs[38])          
            ->setCellValue("AN".$i, $rs[39])          
            ->setCellValue("AO".$i, $rs[40])          
            ->setCellValue("AP".$i, $rs[41])          
            ->setCellValue("AQ".$i, $rs[42])          
            ->setCellValue("AR".$i, $rs[43])          
            ->setCellValue("AS".$i, $rs[44])          
            ->setCellValue("AT".$i, $rs[45])          
            ->setCellValue("AU".$i, $rs[46])          
            ->setCellValue("AV".$i, $rs[47])          
            ->setCellValue("AW".$i, $rs[48])          
            ->setCellValue("AX".$i, $rs[49])          
            ->setCellValue("AY".$i, $rs[50])          
            ->setCellValue("AZ".$i, $rs[51])          
            ->setCellValue("BA".$i, $rs[52])          
            ->setCellValue("BB".$i, $rs[53])          
            ->setCellValue("BC".$i, $rs[54])          
            ->setCellValue("BD".$i, $rs[55])          
            ->setCellValue("BE".$i, $rs[56])          
            ->setCellValue("BF".$i, $rs[57])          
            ->setCellValue("BG".$i, $rs[58])          
            ->setCellValue("BH".$i, $rs[59])          
            ->setCellValue("BI".$i, $rs[60])          
            ->setCellValue("BJ".$i, $rs[61])          
            ->setCellValue("BK".$i, $rs[62])          
            ->setCellValue("BL".$i, $rs[63])          
            ->setCellValue("BM".$i, $rs[64])          
            ->setCellValue("BN".$i, $rs[65])          
            ->setCellValue("BO".$i, $rs[66])          
            ->setCellValue("BP".$i, $rs[67])          
            ->setCellValue("BQ".$i, $rs[68])          
            ->setCellValue("BR".$i, $rs[69])          
            ->setCellValue("BS".$i, $rs[70])
            ->setCellValue("BT".$i, $rs[71])
            ->setCellValue("BU".$i, $rs[72])
            ->setCellValue("BV".$i, $rs[73])
            ->setCellValue("BW".$i, $rs[74])
            ->setCellValue("BX".$i, $rs[75])
            ->setCellValue("BY".$i, $rs[76])
            ->setCellValue("BZ".$i, $rs[77])
            ->setCellValue("CA".$i, $rs[78])
            ->setCellValue("CB".$i, $rs[79])
            ->setCellValue("CC".$i, $rs[80])
            ->setCellValue("CD".$i, $rs[81])
            ->setCellValue("CE".$i, $rs[82])
            ->setCellValue("CF".$i, $rs[83])
            ->setCellValue("CG".$i, $rs[84])
            ->setCellValue("CH".$i, $rs[85])
            ->setCellValue("CI".$i, $rs[86])
            ->setCellValue("CJ".$i, $rs[87])
            ->setCellValue("CK".$i, $rs[88])
            ->setCellValue("CL".$i, $rs[89])
            ->setCellValue("CM".$i, $rs[90])
            ->setCellValue("CN".$i, $rs[91])
            ->setCellValue("CO".$i, $rs[92])
            ->setCellValue("CP".$i, $rs[93])
            ->setCellValue("CQ".$i, $rs[94])
            ->setCellValue("CR".$i, $rs[95]);          
            $i++;
 }
 $objPHPExcel->getActiveSheet()->setTitle($table."_".$starttime."_".$endtime);
 $objPHPExcel->setActiveSheetIndex(0);
 $filename=urlencode($table."_".$starttime."_".$endtime);
//  $objPHPExcel->getActiveSheet()->setTitle('三年级2班');
//  $objPHPExcel->setActiveSheetIndex(0);
//  $filename=date('Y-m-dHis');
//生成xlsx文件

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'.xlsx"');
header('Cache-Control: max-age=0');
$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');


//生成xls文件
//  header('Content-Type: application/vnd.ms-excel');
//  header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
//  header('Cache-Control: max-age=0');
//  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//生成xlsx文件并存入当前文件目录
 function saveExcelToLocalFile($objWriter,$filename){
    // make sure you have permission to write to directory
    $filePath = 'tmp/'.$filename.'.xlsx';
    $objWriter->save($filePath);
    return $filePath;
}
//返回已经存好的文件目录地址提供下载
 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
 $response = array(
     'success' => true,
     'url' => saveExcelToLocalFile($objWriter,$filename)
 );
 echo json_encode($response);
exit();

前台ajax代码部分

 $.ajax({  
    	  	
	      url: 'data/tianjinexcel.php',  
	      dataType:"json",  
	      data:{starttime: $('#starttime').datebox('getValue').replace(/-/g,"").substring(2),
	     	endtime: $('#endtime').datebox('getValue').replace(/-/g,"").substring(2),	
	    		},
	      type:'POST',
	      async:true,
	      beforeSend:function(){
                
                  $("body").showLoading();
    	      },//下面就是获取到的下载地址,直接通过document.location函数获取下载
	      success:function(output){
    	      
	    	  $("body").hideLoading();
	    	  alert(output.url);
	    	  document.location.href =("data/"+output.url);
	  
	  },  
	      error: function(){
	    	  $("body").hideLoading();
    	      sweetAlert("错误", "导出excel出错!", "error");
    	      },  
    	      
	  });



                
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值