5

PHPExcel を使用して Excel テンプレートを読み取り、データを入力し、ユーザーにファイルのダウンロードを依頼しています。

generate_excel.php

$objPHPExcel = PHPExcel_IOFactory::load("./template.xlsx");
//populate data ...
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');

ブラウザから直接 generate_excel.php を開くと、結果ファイルがダウンロードされます。しかし、generate_excel.php に対して ajax 呼び出しを行うと、ダウンロード プロンプトが表示されません。Chrome 開発者ツールを使用すると、[ネットワーク] タブから、ajax 呼び出しが正常に完了し、応答データにランダムな文字が多数表示されていることがわかります。私はそれがExcelオブジェクトであると仮定しています。

ajaxを使用してExcelのダウンロード機能を実現する方法を知っている人はいますか? ページを更新したくありません。ユーザーが「エクスポート」ボタンをクリックすると、php ファイルへの ajax 呼び出しが行われ、ユーザーにダウンロードを促す必要があります。

ありがとう!

4

5 に答える 5

9

ajax を使用して JSON データを PHP に渡し、ユーザーが保存できるように Excel ファイル (MySQL および PHPExcel) を返す方法を探しました。私は周りを見回していくつかのピースをまとめました。それが誰かの助けになることを願っています:

jQuery:

$("#exportBotton").on("click",function(event) {
event.preventDefault();
// create json object;
str_json = JSON.stringify({"key01":val01, "key02":val02, "key03":val03});
        $.ajax({
              type: "post",
              data: str_json,
              url: "../../includes/dbSelect_agentFormExport.php",
              dataType: "json",
              success: function(output){
                          // output returned value from PHP t
              document.location.href =(output.url);
            }
       });
});

PHP:

 $str_json = file_get_contents('php://input');
 $objPHPExcel = new PHPExcel();
 // here i populated objPHPExcel with mysql query result.....

 function saveExcelToLocalFile($objWriter){
    // make sure you have permission to write to directory
    $filePath = '../tmp/saved_File.xlsx';
    $objWriter->save($filePath);
    return $filePath;
}

 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
 $response = array(
     'success' => true,
     'url' => saveExcelToLocalFile($objWriter)
 );
 echo json_encode($response);
 exit();
于 2014-03-19T19:29:22.343 に答える
8

すべてを AJAX で行う必要はありません。単純な古い HTML の方が仕事に適している場合があります。aあなたのボタンにはタグが付いていると思いますか?なぜこのようなことをしないのですか

<a href="generate_excel.php" target="_blank">Export to Excel</a>

あなたのHTMLで?部分に注意してくださいtarget="_blank"。ページがリロードされないようにするためのものです。

inputコンストラクトを使用できるため

<form action="generate_excel.php" target="_blank"><input type="button">...whatever</form>
于 2013-06-27T18:57:05.600 に答える
5

ajax呼び出しで何かをダウンロードできるとは思いません。代わりに、Excel を生成してサーバー (一時) に保存し、ダウンロード リンクをユーザーに表示することができます。

于 2013-06-27T18:54:54.827 に答える
3

これが理想的なアプローチであるかどうかはわかりませんが、これを行う方法を見つけました。

ページに非表示の iframe を追加しました。ajax 呼び出しが戻ると、作成されたデータの URL が返されます。JavaScript を使用して iframe をその URL にリダイレクトすると、ダウンロード アクションが自動的にトリガーされます。

于 2013-06-27T23:02:19.570 に答える