2013-04-09 77 views
9

我正在使用PHPEXxcel導出使用MYSQL生成的HTML表格及其類似。使用PHPExcel導出到xlsx

<?php $query = "SELECT `Firstname`,`Lastname`,`Branch`,`Gender`,`Mobileno`, `Email` 
     FROM `student_details` WHERE Branch IN ('$branch') and `Year`='$year' 
     and Tenthresult > '$tenth' and 
     Twelthresult > '$twelth' and (CGPA > '$cgpa' || CGPA = '$cgpa')"; 

$result = mysql_query($query); 
confirm_query($result); 
$objPHPExcel = new PHPExcel(); 
$objPHPExcel->setActiveSheetIndex(0); 

$rowCount = 1; 
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount,'Firstname'); 
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount,'Lastname'); 
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,'Branch'); 
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount,'Gender'); 
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,'Mobileno'); 
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount,'Email'); 

while($row = mysql_fetch_array($result)){ 
    $rowCount++; 
    $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['0']); 
    $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['1']); 
    $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, $row['2']); 
    $objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount, $row['3']); 
    $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount, $row['4']); 
    $objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount, $row['5']); 
} 

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->save('some_excel_file.xlsx'); 
?> 

它的工作,但它保存在根文件夾中xlsx檔案沒有顯示用戶,其下載的任何跡象。 當我點擊一個按鈕時,這段代碼就會失效。現在,我可以像下載郵件附件一樣下載郵件附件,並在前端顯示用戶正在下載的位置。

我嘗試使用

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="01simple.xls"'); 
header('Cache-Control: max-age=0'); 

有了這個,我得到了我上面想,但打開顯示 消息 文件名‘「您要打開的文件’是一個當下載的XLS文件與指定的擴展名不同的格式.....等。您想現在打開嗎?

打開它包含整個HTML頁面或其簡單的空白... 任何人都可以幫助我..?

+0

看一看,http://www.sitepoint.com/forums/showthread.php?622074-PHP-export-to-xlsx – Rafee 2013-04-09 07:00:12

+0

請注意,您是__not__創建HTML頁面.... HTML是用於網頁的標記。使用PHPExcel,您可以使用BIFF-8文件格式或OfficeOpenXML格式創建Excel文件。 – 2013-04-09 08:13:52

回答

14

電子表格101

有許多不同的電子表格文件格式,每一個都有自己不同的文件擴展名,並且可以發送到使用不同MIME類型Web瀏覽器。這些在PHPExcel文檔中有描述,並且在PHPExcel中每個都有自己的不同Writer。你是不匹配的兩種不同格式

BIFF格式

  • 由Microsoft Excel 95版本和2003文件之間使用

  • 擴展: XLS

  • PHPEXcel Writer: P. HPExcel_Writer_Excel5

  • Mime類型:應用程序/ vnd.ms - Excel中

OfficeOpenXML格式

  • 自2007版本

  • 文件使用Microsoft Excel擴展名: XLSX

  • PHPEXcel編劇: PHPExcel_Writer_Excel2007

  • Mime類型:應用/ vnd.openxmlformats-officedocument.spreadsheetml。片

不要混搭:如果你這樣做,那麼Excel將(有理有據)抱怨。如果您需要BIFF文件,請使用PHPExcel的BIFF Writer(Excel5),.xls的文件擴展名和上面列出的用於BIFF格式的MIME類型。如果您需要OfficeOpenXML文件,請使用PHPExcel的Excel2007編寫器,.xlsx的文件擴展名和上面列出的用於OfficeOpenXML的MIME類型。

編輯

注意,具備PHPExcel分佈的例子包括01simple下載-xls.php和01simple下載-xlsx.php證明你想要什麼

+0

我可以問誰投降實際提供解釋嗎?據我所知,我在回答中陳述的一切都是事實正確的,並直接回答OP的問題,包括引用PHPExcel包中提供的示例(顯示使用php://輸出作爲文件名用於將數據發送到瀏覽器)。 – 2013-04-09 08:48:13

+0

你是對的但使用xlsx當我打開文件時,我收到了上面提到的警告,當給出是的時,它顯示了一些不尋常的數據......該怎麼辦? – Ankur 2013-04-09 13:06:41

+0

請更詳細說明:解釋「異常數據」 – 2013-04-09 13:10:51

6

只需添加這些報頭只發送這些頭文件。剩下的代碼仍然是一樣的,所以你要像以前一樣將xls保存到根文件夾中。

發送標題只會使您通常看到的頁面被髮送xls標題。一些不是你想要的東西,你得到你的HTML頁面,但頭標錯誤。

你需要做的是發送這些頭文件,然後流xlsx

看着隨機線程(我知道,壞主意,但是這會讓你在做什麼領域獲得領先地位)here,你可以找到這樣的例子:

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download");; 
header("Content-Disposition: attachment;filename=$filename.xls"); 
header("Content-Transfer-Encoding: binary "); 
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->setOffice2003Compatibility(true); 
$objWriter->save('php://output'); 
0

試試這個..

header('Content-Type: application/vnd.ms-excel'); 
    $filename = "Reports".date("d-m-Y-His").".xls"; 
    header('Content-Disposition: attachment;filename='.$filename .' '); 
    header('Cache-Control: max-age=0'); 
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
    $objWriter->save('php://output'); 
+0

您能解釋一下您的代碼的作用嗎? – Luca 2017-07-27 09:55:04