0

最初にサーバーに保存した Excel ファイルをクライアントにダウンロードしようとしています (バックアップ目的で)。問題は、クライアント側とはまったく異なるファイル サーバー側を取得することです。サーバー側は正しく、クライアント側は SQL クエリと所要時間を一覧表示します。xlsx は 1 つのワークブック内の複数のシートであり、そのようにする必要があることに注意してください。

public static function generate()
    {
        //Override the max execution time because our report takes longer than 30 seconds to run
        ini_set("max_execution_time", 300);

        $objPHPExcel = new PHPExcel();

        $objPHPExcel = ErsReport::generateDemographics($objPHPExcel);
        $objPHPExcel = ErsReport::generateWorkLocationTab($objPHPExcel);
        $objPHPExcel = ErsReport::generateDisabilityCategoryTab($objPHPExcel);

        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save('ERS Reports\SpeedERS_'.date("Y_m_d").'.xlsx');
        //$objWriter->save('SpeedERS.xlsx');
    }

    public static function download()
    {
        header ('Content-Type: application/vnd.ms-excel; charset=utf-8');
        header ('Content-Disposition: attachment; filename="ERS Reports\SpeedERS_'.date("Y_m_d").'.xlsx"'); 
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: private",false);
        readfile('ERS Reports\SpeedERS_'.date("Y_m_d").'.xlsx');
    }

generate を呼び出してからダウンロードします。生成すると、正しいデータが表示されます。 正しいスプレッドシート

ダウンロードを呼び出すと、不適切なデータと 1 ページしか表示されません。

編集

生成とダウンロードを呼び出す関数。

    function submitERSReport (formLocation) {
        {{ErsReport::generate();}}
        {{ErsReport::download();}}
    }

不適切なスプレッドシート

4

1 に答える 1

0

代わりにこのように呼びました。

function submitERSReport () {
    $.ajax({
        url: "/report/generateERS",
        type: "POST",
        dataType: "json",
        error: function(XMLHttpRequest, textStatus, errorThrown){
            alert("Request failed: getting ERS: " + textStatus + " " + errorThrown);
        },
        success: function(msg){
                var iframe = document.createElement("iframe");
                iframe.style.display = "none";
                iframe.src = msg.filename;
                $('body').append(iframe);
        }
    });
}

このコントローラーで。

public function action_generateERS()
{
    $filename = ErsReport::generate();
    return json_encode(array("filename"=>$filename));
}

そして、モデルに1つの変更を加えました。

    $objWriter->save($_SERVER['DOCUMENT_ROOT'].'/ERS/SpeedERS_'.date("Y_m_d").'.xlsx');
    return('/ERS/SpeedERS_'.date("Y_m_d").'.xlsx');

現在は機能していますが、私はまだ提案を受け付けています。

于 2013-11-07T15:14:16.357 に答える