Ich wollte eine Excel-Datei herunterladen, die mit PHPExcel erstellt wurde. Ich folgte dem Code von PHPExcel Force Download Issue und vergeblich. Nachdem ich den Datenempfang protokolliert habe, zeigt meine Konsole nur voll von diesen Symbolen. Wenn ich jedoch die $objWriter->save('php://output');
zu $objWriter->save('filename.xlsx');
ändere, dann lade ich einfach die Datei in meinen Stammordner auf meinem Webserver herunter, ohne einen Hinweis darauf zu haben, eine Datei herunterzuladen. Unten ist der Code-Snippet für meine PHP-DateiPHPExcel Download-Datei
<?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;
?>
Hier ist mein AngularJS Code-Schnipsel:
$scope.getReport = function(type){
if(type == 'lost'){
$http.post("getLostItemReport.php")
.success(function(data, status, headers, config){
console.log("Get report data: " + data);
})
}
}
Hinweis: Ich verwende AngularJS $ http.post die PHP-Datei aufzurufen.
Browser: Google Chrome
EDIT: Ich habe die Probe PHP-Code von PHPExcel 01simple-Download-xlsx.php und das Ergebnis auch gleiche versucht.
UPDATE: ich eine Lösung, die durch die Suche über AngularJS bekommen durch die Annahme Excel als eine Antwort gefunden habe, aber nach dem Download es, die Datei scheint mit Kauderwelsch Text oder Symbolen ähnlich den beschädigt ist, die in abmeldet meiner Konsole. Außerdem ist der Dateiname ein zufälliger Text und Zahlen anstelle des Dateinamens, den ich in meinem PHP-Code zugewiesen habe. Der Code ist wie folgt:
var blob = new Blob([data], {type: "application/vnd.ms-excel"});
var objectUrl = URL.createObjectURL(blob);
Header hinzufügen: http://stackoverflow.com/questions/8566196/phexcel-to-download –
Bereits versucht, dass. Sie können sie in meinem Code in den Fragen sehen. – imationyj
Das "Kauderwelsch" ___ist___ die Excel-Datei .... Sowohl xls als auch xlsx sind binäre Formate .... und eckig hat keine Ahnung, was man mit einem rohen binären Stream mit einem Inhaltstyp von 'application/vnd.ms-excel tun soll 'oder' application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' –