phpexcel để tải xuống


79

xin chào, tôi mới sử dụng phpexcel và tôi đã tự hỏi liệu có cách nào đó gửi excel mà tôi đã tạo cho khách hàng tải xuống mà không lưu nó trên máy chủ của tôi hay không hoặc xóa nó ngay sau khi anh ấy tải xuống

tôi đang cố gắng tạo một "nút xuất" trên một trang sẽ cung cấp cho người dùng một "cửa sổ bật lên" với excel mà họ muốn mà tôi vừa tạo.

bây giờ sau khi tạo bảng, tôi làm:

$objXLS->getActiveSheet()->getColumnDimension("A")->setAutoSize(true);
$objXLS->getActiveSheet()->getColumnDimension("B")->setAutoSize(true);

$objXLS->getActiveSheet()->setTitle('Test Stats');

$objXLS->setActiveSheetIndex(0);

$objWriter = PHPExcel_IOFactory::createWriter($objXLS, 'Excel5');
$objWriter->save(__DIR__."/test1.xls");

nhưng điều đó sẽ lưu nó vào máy chủ của tôi

cảm ơn bạn

Câu trả lời:


169

Thay vì lưu nó vào một tệp, hãy lưu nó vào php://outputDocuments :

$objWriter->save('php://output');

Thao tác này sẽ gửi AS-IS đến trình duyệt.

Bạn muốn thêm một số tiêu đề Documents đầu tiên, giống như nó chung với tải tập tin, do đó trình duyệt biết loại tập tin đó là gì và làm thế nào nó nên được đặt tên (tên tập tin):

// We'll be outputting an excel file
header('Content-type: application/vnd.ms-excel');

// It will be called file.xls
header('Content-Disposition: attachment; filename="file.xls"');

// Write file to the browser
$objWriter->save('php://output');

Đầu tiên làm tiêu đề, sau đó là lưu. Đối với các tiêu đề excel, hãy xem câu hỏi sau: Đặt loại kịch câm cho tài liệu excel .


1
im nhận được một tập tin để tải nhưng không phải của nó những gì tôi đã tạo ra và khi tôi làm $ objWriter-> tiết kiệm ( 'php: // đầu ra') nó messes lên trang lỗ của tôi = \
Dvir Levy

1
Hãy lưu ý rằng điều duy nhất bạn xuất ra trên trang đó là kết quả từ hai headerdòng và ->save()hành động. Bạn cần quyết định giữa a) hiển thị một trang hoặc b) cung cấp tải xuống. Cả hai đều không hoạt động với một tập lệnh dễ dàng. Tuy nhiên, bạn có thể tạo một tập lệnh cho quá trình tải xuống và một tập lệnh cho trang và khi tập lệnh trang đã bị loại bỏ, hãy chuyển hướng đến tập lệnh tải xuống sẽ làm cho trình duyệt cung cấp hộp thoại lưu dưới dạng.
hakre

vấn đề của tôi là tôi đang sử dụng joomla và tôi không thể tìm thấy cách tải nó từ một trang trống. mỗi khi tôi thử, tôi nhận được trang joomla lỗ với các menu và tất cả. bạn có biết tôi có thể tìm thấy câu trả lời cho vấn đề này ở đâu không? Tôi không muốn thư rác stack overflow ...
Dvir Levy

Dvir - sử dụng & format = raw trong url của bạn. Trong mvc của bạn, hãy tạo tệp view.raw.php.
MSD

1
Làm thế nào bạn có thể đặt Content-Lengthtiêu đề khi sử dụng php://output?
tonix

22
$excel = new PHPExcel();
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="your_name.xls"');
header('Cache-Control: max-age=0');

// Do your stuff here

$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');

// This line will force the file to download
$writer->save('php://output');

xin chào và cảm ơn bạn đã trả lời. tôi đặt dòng $ writer-> save ('php: // output'); và nó không tải xuống tệp mà nó in ra rác trên trang. bạn có biết tại sao điều này xảy ra không?
Dvir Levy

Bạn cũng đã đặt tiêu đề chưa?
matino

Tôi đang cố gắng tạo PPT bằng PHPPowerpoint, đã thực hiện chính xác các bước đã đề cập, nhưng thay đổi MIMELoại thành application/vnd.openxmlformats-officedocument.presentationml.presentation, nó đang tải xuống tệp trên hệ thống của tôi nhưng lại nói rằng File can't be opened. Tệp đã hoạt động khi mã đang ghi nó vào máy chủ.
void

Làm việc hoàn hảo cho tôi. Cảm ơn¡
Jam

6

ĐỂ SỬ DỤNG XLSX

ĐẶT IN $ xlsName tên từ XLSX với phần mở rộng. Ví dụ: $ xlsName = 'teste.xlsx';

$objPHPExcel = new PHPExcel();

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$xlsName.'"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

ĐỂ SỬ DỤNG XLS

ĐẶT IN $ xlsName tên từ XLS với phần mở rộng. Ví dụ: $ xlsName = 'teste.xls';

$objPHPExcel = new PHPExcel();

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$xlsName.'"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

3
PSI: Định dạng XLS là định dạng mặc định 'Excel5' và XLSX là 'Excel2007'.
Rogerio de Moraes

Tôi đang cố gắng tạo PPT bằng PHPPowerpoint, đã thực hiện chính xác các bước đã đề cập, nhưng thay đổi MIMELoại thành application/vnd.openxmlformats-officedocument.presentationml.presentation, nó đang tải xuống tệp trên hệ thống của tôi nhưng lại nói rằng File can't be opened. Tệp đã hoạt động khi mã đang ghi nó vào máy chủ.
void

Loại nội dung cho xlsx nên đọc: "application / vnd.openxmlformats-officedocument.spreadsheetml.sheet". Xem filext.com/faq/office_mime_types.php
kojow7

5

Sử dụng cuộc gọi này

$objWriter->save('php://output');

Để xuất trang tính XLS ra trang bạn đang xem, chỉ cần đảm bảo rằng trang bạn đang xem không có đầu ra echo, print, khác.


Khi làm việc trong shared hosting, tôi gặp lỗi (có thể liên quan đến quyền đối với tệp và thư mục) khi sử dụng $ objWriter-> save ('php: // output'); Không có ngoại lệ 'PHPExcel_Writer_Exception' với thông báo 'Không thể mở php: // đầu ra để viết.' trong third_party / PHPExcel / Writer / Excel2007.php: 241 Dấu vết ngăn xếp: # 0
Enrique

Tôi đang cố gắng tạo PPT bằng PHPPowerpoint, đã thực hiện chính xác các bước đã đề cập, nhưng thay đổi MIMELoại thành application/vnd.openxmlformats-officedocument.presentationml.presentation, nó đang tải xuống tệp trên hệ thống của tôi nhưng lại nói rằng File can't be opened. Tệp đã hoạt động khi mã đang ghi nó vào máy chủ.
void

3
 header('Content-type: application/vnd.ms-excel');

 header('Content-Disposition: attachment; filename="file.xlsx"');

 header('Cache-Control: max-age=0');

 header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

 header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');

 header ('Cache-Control: cache, must-revalidate');

 header ('Pragma: public');

 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

 $objWriter->save('php://output');

Tôi đang cố gắng tạo PPT bằng PHPPowerpoint, đã thực hiện chính xác các bước đã đề cập, nhưng thay đổi MIMELoại thành application/vnd.openxmlformats-officedocument.presentationml.presentation, nó đang tải xuống tệp trên hệ thống của tôi nhưng lại nói rằng File can't be opened. Tệp đã hoạt động khi mã đang ghi nó vào máy chủ.
void

3

có thể bạn đã giải quyết được vấn đề của mình, tôi hy vọng điều này sẽ giúp bạn.

tất cả các tệp được tải xuống bắt đầu bằng dòng trống, trong trường hợp của tôi là bốn dòng trống và nó gây ra sự cố. Không có vấn đề nếu bạn làm việc với readfile();hoặc save('php://output');, Điều này có thể được khắc phục bằng cách thêm ob_start();vào đầu tập lệnh và ob_end_clean();ngay trước readfile(); hoặc save('php://output');.


Vấn đề bạn gặp phải là với việc ghi và báo cáo lỗi của bạn: bạn không thấy các cảnh báo có thể chỉ cho bạn sự cố: tiêu đề đã được gửi. Này được nêu trong câu hỏi tham khảo này: stackoverflow.com/q/8028957/367456
hakre

2
ob_end_clean()notod_end_clean()
turson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.