2013-04-09 33 views
9

Tôi đang sử dụng PHPEXxcel để xuất Bảng HTML được tạo bằng MYSQL và giống như thế này.Sử dụng PHPExcel để xuất sang 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'); 
?> 

Làm việc nhưng nó lưu tệp xlsx vào thư mục gốc mà không hiển thị cho bất kỳ dấu hiệu nào được tải xuống. Mã này rund khi tôi nhấp vào một button.now, tôi có thể làm cho nó được tải xuống như chúng tôi tải xuống tệp đính kèm thư và hiển thị cho người dùng ở giao diện người dùng rằng tệp đang được tải xuống cùng với vị trí hay không.

tôi đã cố gắng sử dụng

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

Với điều này, tôi đang nhận được những gì tôi muốn trên nhưng file xls tải khi mở chương trình thông điệp 'File bạn đang cố gắng để mở 'filename' là trong một định dạng khác với tiện ích mở rộng được chỉ định ..... v.v. Bạn có muốn mở ngay bây giờ không?

Khi mở nó có chứa toàn bộ trang HTML hoặc đơn giản của nó ... Ai có thể giúp tôi ..?

+0

có giao diện, http://www.sitepoint.com/forums/showthread.php?622074-PHP-export-to-xlsx – Rafee

+0

Lưu ý rằng bạn đang __không tạo trang HTML .... HTML là đánh dấu được sử dụng cho các trang web. Với PHPExcel, bạn đang tạo một tệp Excel bằng cách sử dụng định dạng tệp BIFF-8 hoặc định dạng OfficeOpenXML. –

Trả lời

14

Spreadsheets 101

Có rất nhiều định dạng tập tin bảng tính khác nhau, đều có phần mở rộng tên tập tin khác nhau của riêng mình, và có thể được gửi đến trình duyệt web sử dụng kiểu MIME khác nhau. Chúng được mô tả trong tài liệu PHPExcel và mỗi tài liệu có Writer khác nhau trong PHPExcel. Bạn đang mismatching hai định dạng khác nhau

Format BIFF

  • Được sử dụng bởi Microsoft Excel giữa các phiên bản 95 và 2003 file

  • mở rộng: xls

  • Nhà văn PHPEXcel: P HPExcel_Writer_Excel5

  • Mime Type: application/vnd.ms-excel

Format OfficeOpenXML

  • Được sử dụng bởi Microsoft Excel từ phiên bản 2007

  • file gia hạn: xlsx

  • PHPEXcel Writer: PHPExcel_Writer_Excel2007

  • Mime Type: application/vnd.openxmlformats-officedocument.spreadsheetml.tấm

Đừng trộn và kết hợp: nếu bạn làm, sau đó Excel sẽ (và chính đáng) phàn nàn. Nếu bạn muốn tệp BIFF, hãy sử dụng BIFF Writer của PHPExcel (Excel5), phần mở rộng tệp .xls và loại mime được liệt kê ở trên cho Định dạng BIFF. Nếu bạn muốn có tệp OfficeOpenXML, hãy sử dụng Excel2007 Writer của PHPExcel, phần mở rộng tệp .xlsx và loại mime được liệt kê ở trên cho OfficeOpenXML.

EDIT

Lưu ý rằng các ví dụ được cung cấp với sự phân bố PHPExcel bao gồm 01simple-tải-xls.php và 01simple-tải-xlsx.php để chứng minh chính xác những gì bạn muốn

+0

Tôi có thể hỏi ai được downvoted thực sự cung cấp một lời giải thích cho nó? Theo như tôi biết, mọi thứ tôi đã nói trong câu trả lời của tôi là đúng, và trả lời trực tiếp câu hỏi của OP, bao gồm tham chiếu đến các ví dụ được cung cấp trong gói PHPExcel (cho thấy việc sử dụng php: // output làm tên tệp để sử dụng để gửi dữ liệu đến trình duyệt). –

+0

Bạn đang đúng Nhưng sử dụng xlsx khi tôi mở file tôi đang nhận được cảnh báo mà tôi đề cập ở trên và khi được có nó cho thấy một số dữ liệu bất thường ... phải làm gì cho điều đó? – Ankur

+0

Vui lòng chi tiết hơn: giải thích 'dữ liệu bất thường ' –

6

Chỉ cần thêm những tiêu đề chỉ gửi các tiêu đề đó. Phần còn lại của mã của bạn vẫn như cũ, vì vậy bạn đang lưu các xls của mình vào thư mục gốc như bạn đã từng sử dụng.

Gửi các tiêu đề chỉ làm cho các trang web mà bạn sẽ thường thấy được gửi với tiêu đề xls. Một cái gì đó không phải là những gì bạn muốn, và bạn đang nhận được trang HTML của bạn nhưng với các tiêu đề sai.

Những gì bạn cần làm là gửi các tiêu đề đó và sau đó truyền trực tuyến xlsx.

Nhìn vào một sợi ngẫu nhiên (Tôi biết, ý tưởng tồi, nhưng điều này sẽ giúp bạn có một headstart phải làm gì) here, bạn có thể tìm thấy ví dụ như thế này:

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

thử này ..

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

Bạn có thể giải thích mã của bạn làm gì không? – Luca

Các vấn đề liên quan