phpexcel
で生成されたExcelファイルをダウンロードしようとしています。私はphpexcel
の例 "Simple download xlsx"を使用しています。phpexcel - ダウンロードファイルが破損する
私はthis SO questionと同じ概念を使用しています。
私はphp
ファイルをPOST
クライアントから呼び出しています。ヘッダーを一切渡しません。コードの下に使用する:
MessageService.invokePostRequest(
"/rest/testphpexcel1.php",
function(returnedResponse){
var data_type = 'application/vnd.ms-excel';
var excelDoc = new Blob([returnedResponse], {
type: data_type
});
var url = window.URL.createObjectURL(excelDoc);
var exportLink = new core.Element('a');
exportLink.setAttribute('href', url);
exportLink.setAttribute('download', this.filename + '.xlsx');
exportLink.trigger('click');
//adding some delay in removing the dynamically created link solved the problem in FireFox
setTimeout(function() {
window.URL.revokeObjectURL(url);
}, 0);
}.bind(this),{data: JSON.stringify(postData)}
ここ
MessageService.invokePostRequest
はアヤックスのラッパーです。サーバー側では
私はphp
コードの下にきた:
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set document properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
->setLastModifiedBy("Maarten Balliauw")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'Hello')
->setCellValue('B2', 'world!')
->setCellValue('C1', 'Hello')
->setCellValue('D2', 'world!');
// Miscellaneous glyphs, UTF-8
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A4', 'Miscellaneous glyphs');
// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Redirect output to a client’s web browser (Excel2007)
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
は、ここで私は、クライアントとサーバーの両方の側に
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
てみました。
私は(Chromeの開発ツールからの)レスポンスヘッダの下に取得しています:
cache-control:must-revalidate
connection:Keep-Alive
content-disposition:attachment;filename="01simple.xlsx"
content-length:6309
content-transfer-encoding:binary
content-type:text/html; charset=UTF-8
date:Fri, 30 Jun 2017 13:51:40 GMT
keep-alive:timeout=5, max=100
pragma:public
server:Apache/2.4.6 (CentOS) PHP/5.4.16
x-powered-by:PHP/5.4.16
content-length
から、私はそこにいくつかのデータがあると応答]タブで、私はいくつかのちんぷんかんぷんのテキストを見ることができると仮定します。しかし、その応答はExcelファイルに正しく変換されていないと私は思う。
ファイルは常にダウンロードされています。ファイルを開くと、「予期しないトークンPがJSONの位置0にあります」というテキストが表示されます。
私はここで何が間違っているのか分かりません。 phpexcel
によって生成された適切なExcelファイルをダウンロードするにはどうすればよいですか?
は、なぜあなたは( 'namee.xls')セーブ・' $ objWriter->を使用して、サーバー上のExcelファイルを保存していけませんか? –
@ HuyTrhnh私はサーバーへの書き込み権限がありません。この作業を '$ objWriter-> save( 'php:// output');'? – Valay