雑記帳

お仕事関係や育児に関して思う事など。

sfPhpExcelPlugin で、動的にテンプレートシートをコピーして作成する

 public function executeTest()  {

    $objPHPExcel = new sfPhpExcel();

    $objReader = PHPExcel_IOFactory::createReader("Excel2007");

    //テンプレートのパスを指定する

    $objPHPExcel = $objReader->load("template_test.xlsx");

 

    //データのセット

    $test_list = array('テスト1','テスト2');

    $i = 1;

    foreach ($test_list as $test_data) {

         //指定したシートを先頭にコピーする

        $copied = $objPHPExcel->getSheet(0)->copy();

        $copied -> setTitle("copy".$i);

        // 最後にシートを追加

        $objPHPExcel->addSheet($copied);

        // 先頭を選択

        $objPHPExcel->setActiveSheetIndex($i); 

        // 編集作業

        $objPHPExcel->getActiveSheet()->setCellValue('B1', $test_data);

        $objPHPExcel->getActiveSheet()->setCellValue('B2', "copy".$i);

        $i++;

    }

    //テンプレートを削除

    $objPHPExcel->removeSheetByIndex(0);

 
    $output = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');  
    $output->save('/tmp/test.xlsx');    
    //memory から開放
    unset($objPHPExcel);
 
    //ヘッダー出力
    $data = fread(fopen('/tmp/test.xlsx', "r"), filesize('/tmp/test.xlsx'));
    $rp = $this->getContext()->getResponse();
    $response->setHttpHeader('Pragma', '');
    $response->setHttpHeader('Cache-Control', 'max-age=0');
    $response->setHttpHeader('Content-Type', 'application/vnd.ms-excel');
    $response->setHttpHeader('Content-Disposition', 'attachment; filename="test.xlsx"');
    $response->setContent($data);
    
    //テンプレートを表示しないようにする
    return sfView::NONE;
  }
}