0

Excelファイルを出力する小さなPHPExcelスクリプトがあります。問題は、サーバーから開いたときに問題なく開くことができることです。しかし、ブラウザのヘッダーからダウンロードすると機能しません。

インターネットで問題を検索しましたが、役立つものは見つかりませんでした。ob_clean();を試してみました。BOMが問題であるかどうかを確認しましたが、何も機能しませんでした。

ですから、私のスクリプトを機能させる1つのアイデアを持っている人がいることを願っています。

$this->objPHPExcel = $this->objReader->load($this->newFilePath);
    $objWorksheet = $this->objPHPExcel->getActiveSheet();
    $objWriter = PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel2007');
    //Adding IO General Overhead
    foreach($this->sums as $sumkey => $sumval){
        foreach($sumval as $keys => $vals){
            foreach($vals as $key => $val){
                $objWorksheet->setCellValueByColumnAndRow($key, $offset[$sumkey][$keys], $val);
            }
        }
        $objWriter->save($this->newFilePath);
    }

    ob_clean();

    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');


    // It will be called file.xls
    header('Content-Disposition: attachment; filename="'.$this->newFilePath.'"');

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
4

1 に答える 1

0

/Tests または /Examples の 01simple-download-xlsx.php を見て、必要なコードのサンプルを確認してください。

$this->objPHPExcel = $this->objReader->load($this->newFilePath);
    $objWorksheet = $this->objPHPExcel->getActiveSheet();
    $objWriter = PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel2007');
    //Adding IO General Overhead
    foreach($this->sums as $sumkey => $sumval){
        foreach($sumval as $keys => $vals){
            foreach($vals as $key => $val){
                $objWorksheet->setCellValueByColumnAndRow($key, $offset[$sumkey][$keys], $val);
            }
        }
    }


    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');


    // It will be called file.xls
    header('Content-Disposition: attachment; filename="'.$this->newFilePath.'"');

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

        $objWriter->save('php://output');
于 2013-02-25T16:00:02.303 に答える