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 つ取得します。エラー メッセージを修復します。ファイルには反復ごとにワークシートが含まれていますが、既定のシートの後にすべてのユーザーに対して、余分なシートが追加されます。なぜ余分なスプレッドシートが作成されるのですか?