Я хотел скачать файл excel, сгенерированный с помощью PHPExcel. Я следил за кодом от PHPExcel Force Download Issue и безрезультатно. После того, как я зарегистрирую полученные данные, моя консоль показывает только эти символы. Однако, когда я меняю $objWriter->save('php://output');
на $objWriter->save('filename.xlsx');
, он просто загружает файл в мою корневую папку на моем веб-сервере без каких-либо указаний на загрузку файла. Ниже приведен фрагмент кода для моего PHP файлаPHPExcel скачать файл
<?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
EDIT: Я попытался пример кода PHP из PHPExcel 01simple-загрузки-xlsx.php и результат также же.
UPDATE: Я нашел решение, ища о получении AngularJS, принимая Excel в качестве ответа, но после загрузки она, кажется, что файл поврежден с текстом тарабарском или символов, подобной той, которая записывает в мой консоль. Кроме того, имя файла представляет собой случайный текст и цифры вместо имени файла, которое я назначил в моем php-коде. Код, как показано ниже:
var blob = new Blob([data], {type: "application/vnd.ms-excel"});
var objectUrl = URL.createObjectURL(blob);
Добавить заголовок: http://stackoverflow.com/questions/8566196/phpexcel-to-download –
Уже пробовал это. Вы можете увидеть их в моем коде в вопросах. – imationyj
Это «тарабарщина» ___is___ файла Excel .... Оба xls и xlsx являются двоичными форматами .... и угловой не имеет понятия, что делать с необработанным двоичным потоком с типом контента 'application/vnd.ms-excel 'или' application/vnd.openxmlformats-officedocument.spreadsheetml.sheet –