ここでは、PHPExcel を使って範囲指定したセルのコピーを行うサンプルを掲載しています。動作確認を行ったバージョンは PHPExcel-1.7.6 になります。
スポンサーリンク
PHPExcel-1.7.6 では(複数)行コピーや(複数)列コピーはできません。セルのコピーを繰り返し処理する必要があります。下記に示すサンプルでは一般的な Excel のセル位置を表す書式 (ex. A1:B10)ではなく、プログラムから扱いやすいように列と行を数値で扱っています。
範囲を指定してセルをコピー
include_once 'PHPExcel.php'; include_once 'PHPExcel/IOFactory.php'; // テンプレートファイルのパス $template_path = 'path/to/rangecellcopy.xls'; // テンプレートファイルのロード $excel = PHPExcel_IOFactory::load($template_path); // 先頭のページを取得 $sheet = $excel->getSheet(0); $colOffset = 20; // コピー先 列のオフセット値 $rowOffset = 20; // コピー先 行のオフセット値 /* * (0,1)から(9,10) の範囲を (20, 21)から(29, 30) の範囲にコピーする */ for($col=0;$col<10;$col++) { for($row=1;$row<11;$row++) { // セルを取得 $cell = $sheet->getCellByColumnAndRow($col, $row); // セルスタイルを取得 $style = $sheet->getStyleByColumnAndRow($col, $row); // 数値から列文字列に変換する (0,1) → A1 $offsetCell = PHPExcel_Cell::stringFromColumnIndex($col + $colOffset) . (string)($row + $rowOffset); // セル値をコピー $sheet->setCellValue($offsetCell, $cell->getValue()); // スタイルをコピー $sheet->duplicateStyle($style, $offsetCell); } } // Excel 97-2003 形式で作成し、ブラウザに出力する header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="excel97-2003.xls"'); header('Cache-Control: max-age=0'); $writer = PHPExcel_IOFactory::createWriter($excel, "Excel5"); $writer->save('php://output');
注意事項
- PHPExcel では、列の開始インスデックスは 0 であり、行の開始インデックスは 1 である
- 結合されたセルがある場合は、上記の方法では解除されてしまう
セル結合や複雑なシートには不向きだと思われます。また、処理には結構な時間が掛かります。