0

私はPHPExcelを使用して、データベースから取得した情報を使用してExcelファイルを生成しています(クレイジーですよね?)。ファイルを作成するたびにサーバーに保存され、そのファイルへのリンクをユーザーに送信するだけです。彼はそれにアクセスできます。

これが正しい方法だとは思えません。私が探しているのは、サーバーに保存せずにファイルをブラウザに送信することです。

ローカルに保存せずにEXCELファイルをユーザーに直接出力するにはどうすればよいですか?

コード:

$fileName  = "Request_" . $idRequest . "_Update.xls";
$objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$objWriter->save($fileName);
$objPHPExcel = PHPExcel_IOFactory::load($fileName);


echo json_encode(array(
        "ExitCode" => 0,
        "Message" => "Success",            
        "data" => $request,
        "File" => "../reports/$fileName"
    ));

受信Fileした$.ajax通話で受信したら、アンカータグに追加するだけです。

$.ajax({
       ...
       success : function(response){
           $('#container').append('<a href="'+response.File+'">Here is your file</a>
       }
4

3 に答える 3

2

これをチェックしてください。

//    reset all output buffering
    while (ob_get_level() > 0) {
        ob_end_clean();
    }
    header('Content-type: application/ms-excel');
    header('Content-Disposition:  inline; attachment; filename='.$filename);

    // we can't send any more headers after this
    flush();

    $excel = new PhpExcel();
    $excel->setActiveSheetIndex(0);
    $sheet = $excel->getActiveSheet();
    // in this example, $data was an array in the format row => value
    //  data structure is not relevant to issue
    foreach ($data as $key => $value) {
         // add data to sheet here
         $sheet->SetCellValue('A' . $key, $value);
         // etc...
    }
    $writer = new PHPExcel_Writer($excel);
    // push to browser
    $writer->save('php://output');
于 2012-07-30T19:04:42.070 に答える
1

あなたは送ることができます

header("Content-Disposition: attachment; filename=\"file.xls\"");

ダウンロードを強制してから

header("Content-type:application/vnd.ms-excel");

エクセルファイルを送信していることをブラウザに伝え、最後にファイルをhtmlとしてエコーしますtable

<?php
header("Content-Disposition: attachment; filename=\"file.xls\"");
header("Content-type:application/vnd.ms-excel");
echo "<html><table>...</table></html>";  // your table data here..
?>

Excelはs.htmlでファイルを開くことができる<table>ので、問題はありません。

于 2012-07-30T19:00:23.587 に答える
1

この質問に対する受け入れられた応答は、ダウンロード用のファイルを提供することで成功応答を処理する方法、またはmimeタイプの問題なしにjsによって処理される失敗応答(たとえば、現在のhtmlページ内に表示される)を処理する方法を示します

于 2012-07-31T08:01:27.093 に答える