どうもきよです!
今回は業務で使ったPhpSpreadsheetの使い方をメモしていきます。
PHPでのExcel操作は、こちらのライブラリを使用すると便利ですので、
ぜひご確認ください!
■公式
PhpSpreadsheet公式
導入方法
・コンソールから下記コマンドを実行
composer require phpoffice/phpspreadsheet
使い方
■Class内でライブラリをuseする
use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
■Excelのインスタンス作成
$spreadsheet = new Spreadsheet();
※このインスタンスに、カスタマイズしていきます。
※デフォルトで「Worksheet」というシートが作成されています。
■シートの追加
$sheet_name = 'シート1'; $sheet_name = new Worksheet($spreadsheet, $sheet_name); $spreadsheet->addSheet($sheet_name);
※「シート1」というシートが作成されます。
※シートのindex番号は「0」からスタートです。
■Excelファイルを作成する(実体の作成)
$file_path = '/tmp/'; $file_name = 'hoge.xlsx'; $writer = new Xlsx($spreadsheet); $writer->save($file_path.$file_name);
※「/tmp/hoge.xlsx」が出来上がります。
■操作するシートの選択
$sheet_index = 0; $spreadsheet->setActiveSheetIndex($sheet_index);
※デフォルトの「Worksheet」と「シート1」のシートがあった場合、0番目なので「Worksheet」のシートを操作する
■シート名の変更
$sheet_name = 'シート2'; $spreadsheet->getActiveSheet()->setTitle($sheet_name, false);
※現在の操作シートが「Worksheet」の場合、「Worksheet」→「シート2」に変更する
■シート名からシートindex番号を取得
$sheet_name = 'シート1'; $spreadsheet->getIndex($spreadsheet->getSheetByName($sheet_name));
※「Worksheet」と「シート1」のシートがあった場合、「1」が返ります
■データを書き込む
$data = [ [1,2,3], ['hoge1'], ['hoge2'] ]; $spreadsheet->getActiveSheet()->fromArray($data, NULL, $start_cell, true); // 第一引数:書き込むデータ配列 // 第二引数:特定の値があったときに書き込みを拒否する? // 第三引数:書き込みの開始セル(デフォルトは「A1」) // 第四引数:型を厳しく見るかどうか?(デフォルトは「false」)falseだと「0」を書き込んだ場合空白で表示される
※上記の例だと、A1=1, A2=2, A3=3, B1=hoge1, C1=hoge2 として書き込まれる
・縦方向に書き込む例
$data = [1,2,3]; $vertical = array_chunk($data, 1); $spreadsheet->getActiveSheet()->fromArray($vertical);
※上記の例だと、A1=1, B1=2, C1=3 として書き込まれる
■セルのデータを取得する
$cell = 'B3'; $this->spreadsheet->getActiveSheet()->getCell($cell)->getValue();
※B3に書かれているデータを取得できます。
■セルの結合
$cell = 'B1:C1'; $spreadsheet->getActiveSheet()->mergeCells($cell);
※B1とC1を結合します。
■列の横幅を指定する
$column = 'A'; $width = '14.40'; $spreadsheet->getActiveSheet()->getColumnDimension($column)->setWidth($width);
※A列を14.40の横幅にする
■行の高さを指定する
$row = 2; $height = 33.75; $spreadsheet->getActiveSheet()->getRowDimension($row)->setRowHeight($height);
※2行目のセルを33.75の高さにする
■セル内の上下の文字の位置を指定する
$cell = 'A1:C1'; $position = \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER; $spreadsheet->getActiveSheet()->getStyle($cell)->getAlignment()->setVertical($position);
※A1からC1の縦方向の文字の位置を中央にする
※その他の位置は「PhpOffice\PhpSpreadsheet\Style\Alignment」を参照してください
その他にもたくさんの設定が可能ですが、
今回はこの辺で。。
以上、よろしくお願いいたします。