自分が使っていくうえで、よく使う処理や指定方法をメモメモ。
名前空間のエイリアス
名前空間のエイリアスを作成しておく。後で名前空間を使用するときに、完全修飾形式で記述する必要がなくなるため楽になる。
名前空間での関数名をそのまま使用する場合は、as以降の記述は省略できる。
このメモでは、エイリアスを作成していることを前提に、話を進める。
ちなみに、完全修飾形式の部分に、PhpSpreadsheet Documentationなどのドキュメントページへのリンクを貼ってあるため、参考までに。
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader; // 拡張子xlsxのExcelファイル読み込み用 use PhpOffice\PhpSpreadsheet\Writer\Xlsx as XlsxWriter; // 拡張子xlsxのExcelファイル書き込み用 use PhpOffice\PhpSpreadsheet\Reader\Xls as XlsReader; // 拡張子xlsのExcelファイル読み込み用 use PhpOffice\PhpSpreadsheet\Writer\Xls as XlsWriter; // 拡張子xlsのExcelファイル書き込み用 use PhpOffice\PhpSpreadsheet\Spreadsheet; // スプレッドシート用 use PhpOffice\PhpSpreadsheet\Style\Alignment; // 出力位置指定用 use PhpOffice\PhpSpreadsheet\Style\Border; // 罫線用 use PhpOffice\PhpSpreadsheet\Style\Color; // 色指定用 use PhpOffice\PhpSpreadsheet\Style\Fill; // 塗りつぶし種類
Excelファイル入力(読み込み)操作
入力ファイルの指定
// xlsxファイルの場合
$reader = new XlsxReader();
$spreadsheet = $reader->load( 'ファイル名.xlsx' );
// xlsファイルの場合
$reader = new XlsReader();
$spreadsheet = $reader->load( 'ファイル名.xls' );
シートの選択
$sheet = $spreadsheet->getSheet(0); // ひとつめのシート
$sheet = $spreadsheet->getSheet(1); // ふたつめのシート
シート内の全行を取り出す場合
foreach( $sheet->getRowIterator() as $row )
シート内の全列を取り出す場合
foreach( $sheet->getColumnIterator() as $column )
行番号(数字)取得
$row->getRowIndex()
列番号(アルファベット)取得
$column->getColumnIndex()
特定セルの値を取得
$sheet->getCell( 'A1' )->getValue()
シート内の全データを取り出す
foreach( $sheet->getRowIterator() as $row ){
foreach( $sheet->getColumnIterator() as $column ){
$sheet->getCell( $column->getColumnIndex().$row->getRowIndex() )->getValue();
}
}
Excelファイル出力(書き込み)操作
新しいスプレッドシート(ブック)を作成
$spreadsheet = new Spreadsheet();
スプレッドシートのプロパティを設定する
$spreadsheet->getProperties()
->setCreator( '作成者' )
->setLastModifiedBy( '前回保存者' )
->setTitle( 'タイトル' )
->setSubject( '件名' )
->setDescription( 'コメント' );
スプレッドシートのデフォルトフォントを設定
$spreadsheet->getDefaultStyle()->getFont()->setName( 'MS ゴシック' );
スプレッドシートのデフォルトフォントサイズを設定
$spreadsheet->getDefaultStyle()->getFont()->setSize( 11 );
出力先シートを指定(1枚目のシートのみ自動生成される)
$spreadsheet->setActiveSheetIndex( 0 );
$sheet = $spreadsheet->getActiveSheet();
出力先シートを指定(2枚目以降のシートはcreateする)
$sheet = $spreadsheet->createSheet( 1 );
シートのタイトル(タブ名)を指定する
$sheet->setTitle( 'タイトル' );
シートのグリッドラインを消す
$sheet->setShowGridlines( false );
シートの列幅を設定
$sheet->getColumnDimension( 'A' )->setWidth( 10.25 );
$sheet->getColumnDimension( 'B' )->setWidth( 10.25 );
セルの値を出力
$sheet->setCellValue( 'A1', 'セルに出力する値' );
書式設定:フォント指定
$sheet->getStyle( 'A1' )->getFont()->setName( 'MS Pゴシック' );
書式設定:フォントサイズ
$sheet->getStyle( 'A1' )->getFont()->setSize( 10 );
書式設定:小数点第二位までの数値
$sheet->getStyle( 'A1' )->getNumberFormat()->setFormatCode( '0.00' );
スタイル設定:セル内の改行
$sheet->getStyle( 'A1' )->getAlignment()->setWrapText( true ); // セル内改行有効
$sheet->getStyle( 'A1' )->getAlignment()->setWrapText( false ); // セル内改行無効
スタイル設定:水平位置
$sheet->getStyle( 'A1' )->getAlignment()->setHorizontal( Alignment::HORIZONTAL_LEFT ); // 左詰め(左寄せ)
$sheet->getStyle( 'A1' )->getAlignment()->setHorizontal( Alignment::HORIZONTAL_RIGHT ); // 右詰め(右寄せ)
$sheet->getStyle( 'A1' )->getAlignment()->setHorizontal( Alignment::HORIZONTAL_CENTER ); // 中央揃え
スタイル設定:垂直位置
$sheet->getStyle( 'A1' )->getAlignment()->setVertical( Alignment::VERTICAL_TOP ); // 上詰め(上寄せ)
$sheet->getStyle( 'A1' )->getAlignment()->setVertical( Alignment::VERTICAL_BOTTOM ); // 下詰め(下寄せ)
$sheet->getStyle( 'A1' )->getAlignment()->setVertical( Alignment::VERTICAL_CENTER ); // 中央揃え
スタイル設定:背景色
以下のように4パターンの指定方法があります。setRGBは通常の16進数での色指定、setARGBは透明度の指定も可能です。
$sheet->getStyle( 'A1' )->getFill()->setFillType( Fill::FILL_SOLID )->getStartColor()->setRGB( '000000' );
$sheet->getStyle( 'A1' )->getFill()->setFillType( Fill::FILL_SOLID )->getStartColor()->setRGB( Color::COLOR_BLACK );
$sheet->getStyle( 'A1' )->getFill()->setFillType( Fill::FILL_SOLID )->getStartColor()->setARGB( 'FF000000' );
$sheet->getStyle( 'A1' )->getFill()->setFillType( Fill::FILL_SOLID )->getStartColor()->setARGB( Color::COLOR_BLACK );
スタイル設定:セルの結合
$sheet->mergeCells( 'A1:B1' );
スタイル設定:ボーダー
$sheet->getStyle( 'A1' )->getBorders()->getTop()->setBorderStyle( Border::BORDER_THIN ); // 上:細線
$sheet->getStyle( 'A1' )->getBorders()->getLeft()->setBorderStyle( Border::BORDER_DOUBLE ); // 左:二重線
$sheet->getStyle( 'A1' )->getBorders()->getRight()->setBorderStyle( Border::BORDER_DOTTED ); // 右:点線
$sheet->getStyle( 'A1' )->getBorders()->getBottom()->setBorderStyle( Border::BORDER_THICK ); // 下:太線
スタイル設定:いろいろまとめて記述
$styleArray = [
'borders' => [
'outline' => [
'borderStyle' => Border::BORDER_THIN,
'color' => ['rgb' => '000000'],
],
],
'font' => [
'size' => '16',
],
];
$sheet->getStyle( 'A1' )->applyFromArray( $styleArray );
ファイル出力
// xlsxファイルの場合
$writer = new XlsxWriter( $spreadsheet );
$writer->save( 'ファイル名.xlsx' );
// xlsファイルの場合
$writer = new XlsWriter( $spreadsheet );
$writer->save( 'ファイル名.xls' );
初稿:2019年12月10日
コメント