2015-10-14 42 views
0

我創建了一個在Excel中打印報告的phpexcel腳本。測試代碼沒問題,但是當我在表單中爲onclick事件添加了一些ajax時,它返回空白的excel文件。這是我的phpexcel代碼:phpexcel使用ajax返回空白excel文件

include($_SERVER['DOCUMENT_ROOT']."/excel/Classes/PHPExcel.php"); 
include($_SERVER['DOCUMENT_ROOT']."/excel/Classes/PHPExcel/Writer/Excel2007.php"); 
include($_SERVER['DOCUMENT_ROOT']."/excel/Classes/PHPExcel/IOFactory.php"); 

$dept = ""; 
$from = ""; 
$to = ""; 
set_time_limit(0); 

$dept = $_POST['dept']; 
$from = date("Y-m-d",strtotime($_POST['from'])); 
$to = date("Y-m-d",strtotime($_POST['to'])); 

try{ 
$query = $con->prepare("SELECT * FROM emptb WHERE Department = :dept ORDER BY id ASC"); 
$query->bindParam(':dept',$dept); 
$query->execute(); 
} 
catch(PDOException $e){ 
echo $e->getMessage(); 
exit(); 
} 
$objPHPExcel = new PHPExcel; 
$objPHPExcel->setActiveSheetIndex(0); 

$objPHPExcel->setActiveSheetIndex(0); 
//set default font 
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setName('Verdana'); 
//set titles 
$objPHPExcel->getActiveSheet()->SetCellValue('B1','EMPLOYEE ATTENDANCE LOGS'); 
$objPHPExcel->getActiveSheet()->getPageSetUp()->setRowstoRepeatAtTopByStartAndEnd(1,3); 
$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(29.25); 
//merge cells 
$objPHPExcel->getActiveSheet()->mergeCells('B1:T1'); 
$objPHPExcel->getActiveSheet()->mergeCells('C4:D4'); 
$objPHPExcel->getActiveSheet()->mergeCells('E8:F8'); 
//set text alignment 
$objPHPExcel->getActiveSheet()->getStyle('B1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true); 
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(18); 
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFill()->getStartColor()->setARGB('#333'); 
//set column width 
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(6.14); 
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(0.67); 
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(10.86); 
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(1.43); 
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(9.71); 
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(1.43); 
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(10.7); 
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(1.57); 
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(2); 
$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(9); 
$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(0.58); 
$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(0.92); 
$objPHPExcel->getActiveSheet()->getColumnDimension('M')->setWidth(9); 
$objPHPExcel->getActiveSheet()->getColumnDimension('N')->setWidth(1.71); 
$objPHPExcel->getActiveSheet()->getColumnDimension('O')->setWidth(2.43); 
$objPHPExcel->getActiveSheet()->getColumnDimension('P')->setWidth(6.14); 
$objPHPExcel->getActiveSheet()->getColumnDimension('Q')->setWidth(1.71); 
$objPHPExcel->getActiveSheet()->getColumnDimension('R')->setWidth(9.29); 
$objPHPExcel->getActiveSheet()->getColumnDimension('S')->setWidth(4); 
$objPHPExcel->getActiveSheet()->getColumnDimension('T')->setWidth(0.67); 
$objPHPExcel->getActiveSheet()->getColumnDimension('U')->setWidth(0.67); 

$rowCount = 4; 
while($row = $query->fetch()) 
{    
    $rowTitle = $rowCount + 2; 
    $rowTitle1 = $rowCount + 4; 
    //data label 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowCount)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
    $objPHPExcel->getActiveSheet()->mergeCells('C'.($rowCount).':D'.($rowCount)); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowCount)->getAlignment()->setWrapText(true); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowCount)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowCount)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowCount)->getFont()->setName('Arial'); 
    $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,'ID No:'); 

    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
    $objPHPExcel->getActiveSheet()->mergeCells('C'.($rowTitle).':D'.($rowTitle)); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle)->getAlignment()->setWrapText(true); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle)->getFont()->setName('Arial'); 
    $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowTitle,'Name:'); 

    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowCount)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
    $objPHPExcel->getActiveSheet()->mergeCells('I'.($rowCount).':J'.($rowCount)); 
    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowCount)->getAlignment()->setWrapText(true); 
    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowCount)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowCount)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowCount)->getFont()->setName('Arial'); 
    $objPHPExcel->getActiveSheet()->SetCellValue('I'.$rowCount,'Dept:'); 

    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
    $objPHPExcel->getActiveSheet()->mergeCells('C'.($rowTitle1).':D'.($rowTitle1)); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle1)->getAlignment()->setWrapText(true); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle1)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle1)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('C'.$rowTitle1)->getFont()->setName('Arial'); 
    $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowTitle1,'Section:'); 

    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowTitle1)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
    $objPHPExcel->getActiveSheet()->mergeCells('I'.($rowTitle1).':J'.($rowTitle1)); 
    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowTitle1)->getAlignment()->setWrapText(true); 
    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowTitle1)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowTitle1)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('I'.$rowTitle1)->getFont()->setName('Arial'); 
    $objPHPExcel->getActiveSheet()->SetCellValue('I'.$rowTitle1,'Line:'); 
    //data contents 
    $objPHPExcel->getActiveSheet()->mergeCells('E'.($rowCount).':G'.($rowCount)); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowCount)->getAlignment()->setWrapText(true); 
    $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,$row['EmpID']); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowCount)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowCount)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowCount)->getFont()->setName('Arial'); 

    $objPHPExcel->getActiveSheet()->mergeCells('E'.($rowTitle).':S'.($rowTitle)); 
    $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowTitle,$row['Lastname'] . ', ' . $row['Firstname']); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowTitle)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowTitle)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowTitle)->getFont()->setName('Arial'); 

    $objPHPExcel->getActiveSheet()->mergeCells('L'.($rowCount).':S'.($rowCount)); 
    $objPHPExcel->getActiveSheet()->SetCellValue('L'.$rowCount,$row['Department']); 
    $objPHPExcel->getActiveSheet()->getStyle('L'.$rowCount)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('L'.$rowCount)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('L'.$rowCount)->getFont()->setName('Arial'); 

    $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowTitle1,$row['SectionName']); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowTitle1)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowTitle1)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('E'.$rowTitle1)->getFont()->setName('Arial'); 

    $objPHPExcel->getActiveSheet()->SetCellValue('L'.$rowTitle1,$row['LineName']); 
    $objPHPExcel->getActiveSheet()->getStyle('L'.$rowTitle1)->getFont()->setBold(true); 
    $objPHPExcel->getActiveSheet()->getStyle('L'.$rowTitle1)->getFont()->setSize(12); 
    $objPHPExcel->getActiveSheet()->getStyle('L'.$rowTitle1)->getFont()->setName('Arial'); 
    $rowCount++; 

    try{ 
     $subquery = $con->prepare("SELECT c.dt,a.TimeIn,a.LunchOut,a.LunchIn,a.RNDOUT FROM cal c LEFT JOIN attendance a ON a.ValidDate = c.dt 
     AND a.EmpID = :id WHERE c.dt BETWEEN DATE('2015-08-01') AND DATE('2015-08-30') GROUP BY c.dt ORDER BY c.dt ASC"); 
     $subquery->bindParam(':id',$row['EmpID']); 
     $subquery->execute(); 
    } 
    catch(PDOException $e){ 
     echo $e->getMessage(); 
     exit(); 
    } 
    $titleRow = $rowCount + 5; 
    $rowCount += 6; 
    while($subrow = $subquery->fetch()) 
    { 

     if($subrow['TimeIn'] == "00:00:00") 
     { 
      $TimeIn = ""; 
     } 
     else 
     { 
      $TimeIn = $subrow['TimeIn']; 
     } 

     if($subrow['LunchOut']=="00:00:00") 
     { 
      $LunchOut = ""; 
     } 
     else 
     { 
      $LunchOut = $subrow['LunchOut']; 
     } 

     if($subrow['LunchIn']=="00:00:00") 
     { 
      $LunchIn = ""; 
     } 
     else 
     { 
      $LunchIn = $subrow['LunchIn']; 
     } 

     if($subrow['RNDOUT']=="00:00:00") 
     { 
      $TimeOut = ""; 
     } 
     else 
     { 
      $TimeOut = $subrow['RNDOUT']; 
     } 
     $objPHPExcel->getActiveSheet()->getStyle('C'.$titleRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->getStyle('C'.$titleRow)->getFont()->setBold(true); 
     $objPHPExcel->getActiveSheet()->getStyle('C'.$titleRow)->getFont()->setSize(11); 
     $objPHPExcel->getActiveSheet()->getStyle('C'.$titleRow)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('C'.$titleRow,'Date'); 

     $objPHPExcel->getActiveSheet()->getStyle('E'.$titleRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->getStyle('E'.$titleRow)->getFont()->setBold(true); 
     $objPHPExcel->getActiveSheet()->getStyle('E'.$titleRow)->getFont()->setSize(11); 
     $objPHPExcel->getActiveSheet()->getStyle('E'.$titleRow)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('E'.$titleRow,'TimeIn'); 

     $objPHPExcel->getActiveSheet()->getStyle('G'.$titleRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->mergeCells('G'.($titleRow).':H'.($titleRow)); 
     $objPHPExcel->getActiveSheet()->getStyle('G'.$titleRow)->getAlignment()->setWrapText(true); 
     $objPHPExcel->getActiveSheet()->getStyle('G'.$titleRow)->getFont()->setBold(true); 
     $objPHPExcel->getActiveSheet()->getStyle('G'.$titleRow)->getFont()->setSize(11); 
     $objPHPExcel->getActiveSheet()->getStyle('G'.$titleRow)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('G'.$titleRow,'LunchOut'); 

     $objPHPExcel->getActiveSheet()->getStyle('J'.$titleRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->getStyle('J'.$titleRow)->getFont()->setBold(true); 
     $objPHPExcel->getActiveSheet()->getStyle('J'.$titleRow)->getFont()->setSize(11); 
     $objPHPExcel->getActiveSheet()->getStyle('J'.$titleRow)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('J'.$titleRow,'LunchIn'); 

     $objPHPExcel->getActiveSheet()->getStyle('M'.$titleRow)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->getStyle('M'.$titleRow)->getFont()->setBold(true); 
     $objPHPExcel->getActiveSheet()->getStyle('M'.$titleRow)->getFont()->setSize(11); 
     $objPHPExcel->getActiveSheet()->getStyle('M'.$titleRow)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('M'.$titleRow,'TimeOut'); 


     $objPHPExcel->getActiveSheet()->getStyle('C'.$rowCount)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->getStyle('C'.$rowCount)->getFont()->setSize(10); 
     $objPHPExcel->getActiveSheet()->getStyle('C'.$rowCount)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,$subrow['dt']); 

     $objPHPExcel->getActiveSheet()->getStyle('E'.$rowCount)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->getStyle('E'.$rowCount)->getFont()->setSize(10); 
     $objPHPExcel->getActiveSheet()->getStyle('E'.$rowCount)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,$TimeIn); 

     $objPHPExcel->getActiveSheet()->getStyle('G'.$rowCount)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->getStyle('G'.$rowCount)->getFont()->setSize(10); 
     $objPHPExcel->getActiveSheet()->getStyle('G'.$rowCount)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('G'.$rowCount,$LunchOut); 

     $objPHPExcel->getActiveSheet()->getStyle('J'.$rowCount)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->getStyle('J'.$rowCount)->getFont()->setSize(10); 
     $objPHPExcel->getActiveSheet()->getStyle('J'.$rowCount)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('J'.$rowCount,$LunchIn); 

     $objPHPExcel->getActiveSheet()->getStyle('M'.$rowCount)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
     $objPHPExcel->getActiveSheet()->getStyle('M'.$rowCount)->getFont()->setSize(10); 
     $objPHPExcel->getActiveSheet()->getStyle('M'.$rowCount)->getFont()->setName('Arial'); 
     $objPHPExcel->getActiveSheet()->SetCellValue('M'.$rowCount,$TimeOut); 
     $rowCount++; 
    } 
    $rowCount+=1; 
    $newRow = $objPHPExcel->getActiveSheet()->getHighestRow(); 
    $objPHPExcel->getActiveSheet()->setBreak('A'.$newRow,PHPExcel_WorkSheet::BREAK_ROW); 
    } 
    $excelWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007'); 
    header('Content-Type:application/ms-excel'); 
    header('Content-Disposition:attachment;filename="'.$dept.'.xlsx"'); 
    header('Cache-Control:max-age=0'); 
    $excelWriter->save('php://output'); 

這裏是莫名其妙地返回空值

function myFunction() 
    { 
    var idept = $("#cmbdept[name=dept]").val(); 
    var first = $("#from[name=from]").val(); 
    var second = $("#to[name=to]").val(); 

    $.ajax({ 
    url: "printreport.php", 
    type: 'post', 
    data: {dept: idept,from: first,to: second}, 
    cache: false, 
    global: false; 
    success: function(data) 
    { 
     //alert('Report is printing'); 
     window.open('http://localhost/hrtms/printreport.php','_blank'); 
    } 
    }); 
    return false; 
    } 

回答

0

我覺得你叫printreport.php兩次我的AJAX功能。
在第一次調用(在ajax),這使得excel文件。
在第二個電話(在window.open),沒有參數。
這就是爲什麼返回空文件,我猜。

如何使真實文件在printreport.phpwindow.open創建文件的網絡路徑?

這是我通過phpexcel製作excel文件時的代碼。

$objWriter = PHPExcel_IOFactory::createWriter($xlsObj, 'Excel2007'); 
$filename = 'FILENAME_WHAT_YOU_WANT'; 
$file_full_name = 'DATA_PATH_WHAT_YOU_WANT' . '/' . $filename; 
$objWriter->save($file_full_name); 

P.S我不擅長英語,如果你覺得奇怪,請原諒我。

-----追加更多-----
在PHP退貨文件路徑之後創建Excel文件

if(file_exists($file_full_name)){ 
    echo json_encode(array('error'=>false, 'export_path'=>'/temp_upload/' . $filename)); 
}else{ 
    echo json_encode(array('error'=>true, 'error_msg' => 'Export Failed')); 
} 

在javascript鏈接至創建Excel文件

$.ajax({ 
    'url': '/menu/audience/exportActivity', 
    'dataType': 'json', 
    'type': 'post', 
    'data': data, 
    success: function(r){ 
     //for loading animation to hide 
     $('body').find('div.loading.all').css('display', 'none'); 
     if(!r.error){ 
      location.href = r.export_path; 
     } 
    }, 
    error: function(a, b, c){ 
     $('body').find('div.loading.all').css('display', 'none'); 
    } 
}); 

這是我的代碼當我編碼

+0

我的問題是在ajax部分不在phpexcel部分,因爲我已經在我的phpexcel中的代碼。 –

+0

我是返回創建excel文件的web路徑,並鏈接到ajax成功函數中創建的文件。如果我的回答沒有幫助,我很抱歉。 –

+0

謝謝你的回答,但我不認爲這會對我的問題有所幫助。 –