1

Zend アプリケーションで phpExell を使用して、複数のワークシートを含む Excel ファイルを印刷しようとしています。

私のコントローラークラスには、次のグローバル変数があります...

public $objPHPExcel;  

そのようなアクション関数で初期化されます...

$this->objPHPExcel = new PHPExcel();  

その後、アクションはいくつかのデータベース呼び出しを反復し、レポートを作成します。反復ごとに次の関数を呼び出し、整数としてワークシートのインデックス、出力するデータの配列、およびワークシートの名前を含む文字列を渡します。

protected function buildWorksheet($index, $report, $repName) {
   //build new worksheet after default
   if($index > 0) {
       $objWorksheet = $this->objPHPExcel->createSheet();
       $this->objPHPExcel->addSheet($objWorksheet);
   }  else {
        $this->objPHPExcel->setActiveSheetIndex($index);
        $objWorksheet = $this->objPHPExcel->getActiveSheet();
   }  
    //write the worksheet
    $col = 0;
    $row = 1;
    foreach($report as $entry) {
        foreach($entry as $key => $value) {
             $objWorksheet->setCellValueByColumnAndRow($col, $row, $value);
            $col++;
        }
        $row++;
        $col = 0;

    }

    $objWorksheet->setTitle($repName);  
}

次に、アクションに戻ってExcelファイルを印刷します...

    $objWriter = PHPExcel_IOFactory::createWriter($this->objPHPExcel, 'Excel5');
    ob_start();
    if ( headers_sent() ) die("**Error: headers sent");
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header('Content-Disposition: attachment;filename="simple.xls"');
    header("Content-Transfer-Encoding: binary");
    ob_clean();
    $objWriter->save('php://output');
    exit();

Excelでファイルを開くと、次のメッセージが表示されます...

 Excel found unreadable content in 'simple.xls'. Do you want to recover the contents of this workbook?

はいをクリックします。次に、「改名された無効なシート名」を 2 つ取得します。エラー メッセージを修復します。ファイルには反復ごとにワークシートが含まれていますが、既定のシートの後にすべてのユーザーに対して、余分なシートが追加されます。なぜ余分なスプレッドシートが作成されるのですか?

4

2 に答える 2

0

addSheetを呼び出す必要がないことがわかりました。createSheet()が自動的にこれを行います。私は削除しました

 $this->objPHPExcel->addSheet($objWorksheet);

今は問題なく動作します。

于 2012-06-27T22:11:50.993 に答える
0
/**
 * Create sheet __and add it to this workbook__
 *
 * @param int|null $iSheetIndex Index where sheet should go (0,1,..., or null for last)
 * @return PHPExcel_Worksheet
 * @throws Exception
 */
public function createSheet($iSheetIndex = null)
于 2012-06-27T22:42:54.797 に答える