簡體   English   中英

如何使用PhpSpreadSheet將Xlsx文件下載到客戶端

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM