12

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 ファイルがルート フォルダーに保存されますが、ダウンロードされているという兆候はユーザーに表示されません。このコードは、ボタンをクリックすると実行されます。これで、メールの添付ファイルをダウンロードして、場所とともにダウンロードされていることをフロントエンドでユーザーに示すように、ダウンロードできるようにできますか。

使ってみた

header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="01simple.xls"');
header('Cache-Control: max-age=0'); 

これで、私は上記の必要なものを取得していますが、開いたときにダウンロードされたxlsファイルには、「「ファイル名」を開こうとしているファイルは、指定された拡張子とは異なる形式です.....などのメッセージが表示されます。今開くには?

開くと、HTMLページ全体または単に空白のいずれかが含まれています...誰か助けてくれますか..?

4

4 に答える 4

18

スプレッドシート 101

さまざまなスプレッドシート ファイル形式があり、それぞれに独自のファイル拡張子があり、さまざまな MIME タイプを使用して Web ブラウザーに送信できます。これらは PHPExcel のドキュメントで説明されており、PHPExcel にはそれぞれ独自の異なるライターがあります。2 つの異なる形式が一致していません

BIFF形式

  • バージョン 95 から 2003 の間の Microsoft Excel で使用されるファイル

  • 拡張子: xls

  • PHPEXcel ライター: PHPExcel_Writer_Excel5

  • MIME タイプ: application/vnd.ms-excel

OfficeOpenXML 形式

  • バージョン 2007 以降の Microsoft Excel で使用

  • ファイル拡張子: xlsx

  • PHPEXcel ライター: PHPExcel_Writer_Excel2007

  • MIME タイプ: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

混ぜ合わせないでください: 混ぜ合わせると、Excel が (そして当然のことながら) 文句を言います。BIFF ファイルが必要な場合は、PHPExcel の BIFF Writer (Excel5)、ファイル拡張子 .xls、上記の BIFF 形式の MIME タイプを使用します。OfficeOpenXML ファイルが必要な場合は、PHPExcel の Excel2007 Writer、ファイル拡張子 .xlsx、および上記の OfficeOpenXML 用の MIME タイプを使用します。

編集

PHPExcel ディストリビューションで提供される例には、01simple-download-xls.php と 01simple-download-xlsx.php が含まれていることに注意してください。

于 2013-04-09T08:11:29.030 に答える
9

それらのヘッダーを追加するだけで、それらのヘッダーのみが送信されます。コードの残りの部分は同じなので、以前と同じように xls をルート フォルダーに保存します。

ヘッダーを送信すると、通常表示されるページが xls ヘッダーで送信されるだけになります。あなたが望んでいるものではなく、HTML ページを取得していますが、ヘッダーが間違っています。

あなたがする必要があるのは、それらのヘッダーを送信してから xlsx をストリーミングすることです。

ここ でランダムなスレッド (悪い考えだとわかっていますが、これで何をすべきか有利なスタートを切ることができます)見ると、次のような例を見つけることができます。

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');
于 2013-04-09T08:29:19.073 に答える