PHPExcel скачать файл

Я хотел скачать файл Excel, созданный с помощью PHPExcel. Я следовал за кодом от PHPExcel Force Проблема с загрузкой и безрезультатно. После того, как я регистрирую полученные данные, моя консоль показывает только эти символы H. Однако, когда я изменяю $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-файла.

Браузер: Google Chrome

РЕДАКТИРОВАТЬ: я попробовал пример php-кода из PHPExcel 01simple-download-xlsx.php и результат также тот же.

ОБНОВИТЬ:Я нашел какое-то решение, пытаясь найти AngularJS, приняв Excel в качестве ответа, но после его загрузки кажется, что файл поврежден бессмысленным текстом или символами, похожими на те, которые выходят из моей консоли. Кроме того, имя файла — это случайный текст и цифры вместо имени файла, которое я назначил в своем php-коде. Код как ниже:

var blob = new Blob([data], {type: "application/vnd.ms-excel"});
var objectUrl = URL.createObjectURL(blob);

5

Решение

Я нашел решение для загрузки с помощью AngularJS с возможностью изменения имени файла на лету. Нам нужно будет скачать FileSave.js и включите в заголовок index.html. Фрагмент кода, как показано ниже:

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.

2

Другие решения

У вас есть файл Excel в корневой папке, верно?

Итак, я думаю, что вы можете использовать header('Location: path to your excel file'); Это должно помочь вам загрузить файл.


Есть еще один вариант после $objWriter->save('filename.xlsx'); добавлять echo json_encode(readfile($file));

в угловом использовании кода JS

$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');

Попробуй это.

1

У меня есть очень простое решение, которое я использую на своем сайте. Надеюсь, это работает.

Создайте гиперссылку и установите в href свой файл Excel и используйте атрибут загрузки.

<a href='file to excel' download='download'>Download Excel File</a>

При нажатии на эту ссылку файл начнет загружаться.

1
По вопросам рекламы [email protected]