PHPExcel下载文件
PHPExcel download file
我想下载使用 PHPExcel 生成的 excel 文件。我按照 PHPExcel Force Download Issue 中的代码进行操作,但无济于事。在我记录接收到的数据后,我的控制台只显示了这些符号。但是,当我将 $objWriter->save('php://output');
更改为 $objWriter->save('filename.xlsx');
时,它只是将文件下载到我的网络服务器的根文件夹中,没有任何下载文件的指示。下面是我的 php 文件
的代码片段
<?php
$con = mysqli_connect('localhost', 'root', '', 'test');
mysqli_select_db($con, 'test');
$qry = "SELECT * FROM lostitem";
$res = mysqli_query($con, $qry);
require_once '/Classes/PHPExcel.php';
include '/Classes/PHPExcel/Writer/Excel2007.php';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
/** Determine filename **/
$filename = "report.xlsx";
/** Set header information **/
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');
$F=$objPHPExcel->getActiveSheet();
$Line=1;
$F->setCellValue('A'.$Line, 'Lost Item ID');
$F->setCellValue('B'.$Line, 'Lost Item Title');
$F->setCellValue('C'.$Line, 'Lost Item Description');
while($Trs=mysqli_fetch_assoc($res)){//extract each record
++$Line;
$F->setCellValue('A'.$Line, $Trs['LostItemID']);
$F->setCellValue('B'.$Line, $Trs['LostItemTitle']);
$F->setCellValue('C'.$Line, $Trs['LostItemDescription']);//write in the sheet
//++$Line;
}
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
?>
这是我的 angularjs 代码片段:
$scope.getReport = function(type){
if(type == 'lost'){
$http.post("getLostItemReport.php")
.success(function(data, status, headers, config){
console.log("Get report data: " + data);
})
}
}
注意:我正在使用 AngularJS $http.post 调用 php 文件。
浏览器:GoogleChrome
编辑:我尝试了 PHPExcel 01simple-download-xlsx.php 中的示例 php 代码,结果也相同。
更新:我通过搜索接受 Excel 作为响应来获取 AngularJS 找到了一些解决方案,但在下载它之后,文件似乎已被乱码文本损坏或类似于在我的控制台中注销的符号。除此之外,文件名是随机文本和数字,而不是我在 php 代码中指定的文件名。代码如下:
var blob = new Blob([data], {type: "application/vnd.ms-excel"});
var objectUrl = URL.createObjectURL(blob);
您的根文件夹中是否有 excel 文件?
所以,我认为你可以使用 header('Location: path to your excel file');
这应该可以帮助你下载文件。
$objWriter->save('filename.xlsx');
后还有一个选项加echo json_encode(readfile($file));
在angularjs代码中使用
$scope.getReport = function (type) {
if (type == 'lost') {
$http({
url: 'getLostItemReport.php',
method: 'POST',
responseType: 'arraybuffer',
headers: {
'Content-type': 'application/json',
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}
})
.success(function (data, status, headers, config) {
var blob = new Blob([data], {
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
});
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
})
}
并将你的 header('Content-Type: application/vnd.ms-excel');
设置为 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
试试这个。
我在我的网站上使用了一个非常基本的解决方案。希望这有效。
创建一个 hyperlink 并将 href 设置为您的 excel 文件并使用下载属性。
<a href='file to excel' download='download'>Download Excel File</a>
当您单击此 link 时,文件将开始下载。
我找到了一个使用 AngularJS 下载的解决方案,可以即时更改文件名。我们需要下载 FileSave.js 并包含在 index.html 的 header 中。代码片段如下:
main.js
$scope.fetchReport = function(){
$http({
url: 'path_to_php_file',
method: 'POST',
responseType: 'arraybuffer',
headers: {
'Content-type': 'application/json',
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}
}).success(function(data){
var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
saveAs(blob, file_name_to_be+'.xlsx');
}).error(function(){
//Some error log
});
}
index.html
<button class="btn btn-primary" ng-click="fetchReport()">Get Report</button>
php 文件与问题中的相同,只需要在 exit;
之前添加几行
header('Content-disposition: attachment; filename='.$filename);
header('Content-Length: ' . filesize($filename));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
//Replace php://output with $filename and add code below after that(before exit;)
readfile($filename);
注意:仅适用于 HTML5 支持的浏览器。
我想下载使用 PHPExcel 生成的 excel 文件。我按照 PHPExcel Force Download Issue 中的代码进行操作,但无济于事。在我记录接收到的数据后,我的控制台只显示了这些符号。但是,当我将 $objWriter->save('php://output');
更改为 $objWriter->save('filename.xlsx');
时,它只是将文件下载到我的网络服务器的根文件夹中,没有任何下载文件的指示。下面是我的 php 文件
<?php
$con = mysqli_connect('localhost', 'root', '', 'test');
mysqli_select_db($con, 'test');
$qry = "SELECT * FROM lostitem";
$res = mysqli_query($con, $qry);
require_once '/Classes/PHPExcel.php';
include '/Classes/PHPExcel/Writer/Excel2007.php';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
/** Determine filename **/
$filename = "report.xlsx";
/** Set header information **/
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');
$F=$objPHPExcel->getActiveSheet();
$Line=1;
$F->setCellValue('A'.$Line, 'Lost Item ID');
$F->setCellValue('B'.$Line, 'Lost Item Title');
$F->setCellValue('C'.$Line, 'Lost Item Description');
while($Trs=mysqli_fetch_assoc($res)){//extract each record
++$Line;
$F->setCellValue('A'.$Line, $Trs['LostItemID']);
$F->setCellValue('B'.$Line, $Trs['LostItemTitle']);
$F->setCellValue('C'.$Line, $Trs['LostItemDescription']);//write in the sheet
//++$Line;
}
// Redirect output to a client’s web browser (Excel5)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
?>
这是我的 angularjs 代码片段:
$scope.getReport = function(type){
if(type == 'lost'){
$http.post("getLostItemReport.php")
.success(function(data, status, headers, config){
console.log("Get report data: " + data);
})
}
}
注意:我正在使用 AngularJS $http.post 调用 php 文件。
浏览器:GoogleChrome
编辑:我尝试了 PHPExcel 01simple-download-xlsx.php 中的示例 php 代码,结果也相同。
更新:我通过搜索接受 Excel 作为响应来获取 AngularJS 找到了一些解决方案,但在下载它之后,文件似乎已被乱码文本损坏或类似于在我的控制台中注销的符号。除此之外,文件名是随机文本和数字,而不是我在 php 代码中指定的文件名。代码如下:
var blob = new Blob([data], {type: "application/vnd.ms-excel"});
var objectUrl = URL.createObjectURL(blob);
您的根文件夹中是否有 excel 文件?
所以,我认为你可以使用 header('Location: path to your excel file');
这应该可以帮助你下载文件。
$objWriter->save('filename.xlsx');
后还有一个选项加echo json_encode(readfile($file));
在angularjs代码中使用
$scope.getReport = function (type) {
if (type == 'lost') {
$http({
url: 'getLostItemReport.php',
method: 'POST',
responseType: 'arraybuffer',
headers: {
'Content-type': 'application/json',
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}
})
.success(function (data, status, headers, config) {
var blob = new Blob([data], {
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
});
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
})
}
并将你的 header('Content-Type: application/vnd.ms-excel');
设置为 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
试试这个。
我在我的网站上使用了一个非常基本的解决方案。希望这有效。
创建一个 hyperlink 并将 href 设置为您的 excel 文件并使用下载属性。
<a href='file to excel' download='download'>Download Excel File</a>
当您单击此 link 时,文件将开始下载。
我找到了一个使用 AngularJS 下载的解决方案,可以即时更改文件名。我们需要下载 FileSave.js 并包含在 index.html 的 header 中。代码片段如下:
main.js
$scope.fetchReport = function(){
$http({
url: 'path_to_php_file',
method: 'POST',
responseType: 'arraybuffer',
headers: {
'Content-type': 'application/json',
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}
}).success(function(data){
var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
saveAs(blob, file_name_to_be+'.xlsx');
}).error(function(){
//Some error log
});
}
index.html
<button class="btn btn-primary" ng-click="fetchReport()">Get Report</button>
php 文件与问题中的相同,只需要在 exit;
header('Content-disposition: attachment; filename='.$filename);
header('Content-Length: ' . filesize($filename));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
//Replace php://output with $filename and add code below after that(before exit;)
readfile($filename);
注意:仅适用于 HTML5 支持的浏览器。