[PHP] PhpSpreadsheetでよく使う処理や指定方法のメモ

自分が使っていくうえで、よく使う処理や指定方法をメモメモ。

名前空間のエイリアス

名前空間のエイリアスを作成しておく。後で名前空間を使用するときに、完全修飾形式で記述する必要がなくなるため楽になる。

名前空間での関数名をそのまま使用する場合は、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日

この記事をシェア

アカウントをフォロー