[英]how to download Xlsx file using PhpSpreadSheet to client
我正在嘗試使用 PhpSpreadSheet 下載“Xlsx”文件,我確信代碼工作正常,但我得到的只是這些奇怪的字符出現在我的控制台中
我在 stackoverflow 中嘗試了幾乎所有的解決方案,但都在下面的圖片中給出了相同的結果
我嘗試過的解決方案: solution more solutions
我的代碼
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', 'Name');
$sheet->setCellValue('C1', 'Name2');
$sheet->setCellValue('D1', 'Name3');
$sheet->setCellValue('E1', 'Type');
// Write an .xlsx file
$date = date('d-m-y-'.substr((string)microtime(), 1, 8));
$date = str_replace(".", "", $date);
$filename = "export_".$date.".xlsx";
try {
$writer = new Xlsx($spreadsheet);
$writer->save($filename);
$content = file_get_contents($filename);
} catch(Exception $e) {
exit($e->getMessage());
}
header("Content-Disposition: attachment; filename=".$filename);
unlink($filename);
您將電子表格保存到一個文件中,然后讀取該文件,但您沒有將文件發送到瀏覽器,您發送的只是帶有文件名的標題(這只是一個建議,將出現在文件保存日志中)
try {
$writer = new Xlsx($spreadsheet);
$writer->save($filename);
$content = file_get_contents($filename);
} catch(Exception $e) {
exit($e->getMessage());
}
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="' . urlencode($filename) .'"' );
echo $content; // this actually send the file content to the browser
unlink($filename);
我剛剛運行了這個確切的代碼,它運行良好,使用 Chrome 和 Firefox 和 Edge 瀏覽器。
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', 'Name');
$sheet->setCellValue('C1', 'Name2');
$sheet->setCellValue('D1', 'Name3');
$sheet->setCellValue('E1', 'Type');
// Write an .xlsx file
$date = date('d-m-y-'.substr((string)microtime(), 1, 8));
$date = str_replace(".", "", $date);
$filename = "data/export_".$date.".xlsx";
try {
$writer = new Xlsx($spreadsheet);
$writer->save($filename);
$content = file_get_contents($filename);
} catch(Exception $e) {
exit($e->getMessage());
}
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="' . urlencode($filename) .'"' );
echo $content; // this actually send the file content to the browser
unlink($filename);
以下似乎有效:
注意:$filePath 應該是具有正確權限的文件夾
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', 'Name');
$sheet->setCellValue('C1', 'Name2');
$sheet->setCellValue('D1', 'Name3');
$sheet->setCellValue('E1', 'Type');
// Write an .xlsx file
$date = date('d-m-y-'.substr((string)microtime(), 1, 8));
$date = str_replace(".", "", $date);
$filename = "export_".$date.".xlsx";
$filePath = __DIR__ . DIRECTORY_SEPARATOR . $filename; //make sure you set the right permissions and change this to the path you want
try {
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save($filePath);
} catch(Exception $e) {
exit($e->getMessage());
}
// redirect output to client browser
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
嘗試將此用於您的 header 'Content-Type' -
header('Content-Type: application/vnd.ms-excel; charset=UTF-8');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.