私はPHPEXxcelを使用して、MYSQLなどを使用して生成されたHTMLテーブルをエクスポートしています。
<?php $query = "SELECT `Firstname`,`Lastname`,`Branch`,`Gender`,`Mobileno`, `Email`
FROM `student_details` WHERE Branch IN ('$branch') and `Year`='$year'
and Tenthresult > '$tenth' and
Twelthresult > '$twelth' and (CGPA > '$cgpa' || CGPA = '$cgpa')";
$result = mysql_query($query);
confirm_query($result);
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$rowCount = 1;
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount,'Firstname');
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount,'Lastname');
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,'Branch');
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount,'Gender');
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,'Mobileno');
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount,'Email');
while($row = mysql_fetch_array($result)){
$rowCount++;
$objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['0']);
$objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['1']);
$objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount, $row['2']);
$objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount, $row['3']);
$objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount, $row['4']);
$objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount, $row['5']);
}
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save('some_Excel_file.xlsx');
?>
動作しますが、ダウンロードされていることをユーザーに示すことなく、xlsxファイルをルートフォルダーに保存します。このコードは、button.nowをクリックすると実行されます。メールの添付ファイルをダウンロードし、ダウンロードしていることをフロントエンドのユーザーに場所と一緒に表示するようにダウンロードできます。
使ってみた
header('Content-Type: application/vnd.ms-Excel');
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0');
これで、私は上で欲しいものを手に入れていますが、開いたときにダウンロードされたxlsファイルには、「 'filename'を開こうとしているファイルは指定された拡張子とは異なる形式です...」というメッセージが表示されます今すぐ開ける?
開くと、HTMLページ全体または単に空白のいずれかが含まれます...誰か助けてもらえますか?
スプレッドシート101
さまざまなスプレッドシートファイル形式があり、それぞれに独自のファイル名拡張子があり、さまざまなMIMEタイプを使用してWebブラウザーに送信できます。これらは、PHPExcelのドキュメントで説明されており、それぞれにPHPExcelの異なるライターがあります。 2つの異なる形式が一致していません
BIFF形式
バージョン95と2003の間でMicrosoft Excelによって使用されるファイル
拡張子: xls
PHPEXcel Writer: PHPExcel_Writer_Excel5
MIMEタイプ: application/vnd.ms-Excel
OfficeOpenXML形式
バージョン2007以降のMicrosoft Excelで使用
ファイル拡張子: xlsx
PHPEXcel Writer: PHPExcel_Writer_Excel2007
MIMEタイプ: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
混ぜて一致させないでください。そうすると、Excelが(そして正当な理由で)文句を言います。 BIFFファイルが必要な場合は、PHPExcelのBIFFライター(Excel5)、. xlsのファイル拡張子、およびBIFF形式用に上記のMIMEタイプを使用します。 OfficeOpenXMLファイルが必要な場合は、PHPExcelのExcel2007 Writer、ファイル拡張子.xlsx、および上記のOfficeOpenXMLのMIMEタイプを使用します。
[〜#〜] edit [〜#〜]
PHPExcelディストリビューションで提供されるサンプルには、01simple-download-xls.phpおよび01simple-download-xlsx.phpが含まれており、目的を正確に示すことができます。
それらのヘッダーを追加するだけで、それらのヘッダーのみが送信されます。コードの残りの部分は同じなので、以前と同じようにxlsをルートフォルダーに保存しています。
ヘッダーを送信しても、通常表示されるページはxlsヘッダーで送信されます。あなたが望んでいるものではない何か、あなたはあなたのHTMLページを取得していますが、間違ったヘッダーを持っています。
必要なのは、それらのヘッダーを送信してから、xlsxをストリーミングすることです。
ランダムなスレッドを見る(悪いアイデアは知っていますが、これで何をすべきかがすぐにわかります) here 、次のような例を見つけることができます:
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=$filename.xls");
header("Content-Transfer-Encoding: binary ");
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->setOffice2003Compatibility(true);
$objWriter->save('php://output');
以下のスニペットを使用してそれを行います。
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="test_file.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
これを試して ..
header('Content-Type: application/vnd.ms-Excel');
$filename = "Reports".date("d-m-Y-His").".xls";
header('Content-Disposition: attachment;filename='.$filename .' ');
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');