[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Spout のセルなどへのスタイル設定は PhpSpreadsheet の様にセルに対してスタイルを設定するのではなく、 設定するセルデータや列データに対してスタイルを設定しておいたものを、エクセルのデータとして追加設定する方式になっています。
セルデータや列データを宣言する前にスタイル設定データを生成しておいて、セルデータ等の生成時に付加してやります。
Spout の導入の以下の記事で簡単なエクセル出力を紹介しましたが、そのソースを元にスタイル設定を追加することで説明したいと思います。
⇒PHP Spoutを使用してエクセル出力を行う方法について(Spoutをcomposerでインストール)
■セルデータへのスタイル設定について
セルデータの生成は WriterEntityFactory::createCell() 関数で行いますがこの関数の第2引数にはスタイルの設定値を指定できます。
// createCell宣言 public static function createCell($cellValue, Style $cellStyle = null) // $cellValue : セルデータ // $cellStyle : セルスタイル(デフォルトはNULL)
この「$cellStyle」ですが StyleBuilder クラスを生成し、各種のスタイル設定を行ってから build 関数でスタイル値を作成します。
以下の様な感じです。
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder; // StyleBuilderでスタイル生成 $sb = new StyleBuilder(); $style = $sb ->setFontName('MS ゴシック') ->setFontSize(15) ->setFontColor(Color::BLUE) ->build();
StyleBuilder クラスの持つ各種関数は後の方で説明します。
このクラスを使った簡単な例を以下の項目で記します。
■セルデータへのスタイル設定による簡単な例
以下のプログラムでは、 StyleBuilder クラスを生成し「フォント名:'MS ゴシック'」「フォントサイズ:15」「前景色:青、赤、緑」のスタイルを生成します。 前景色ごとに3種のスタイルとして生成し、それを各セル毎に指定します。
<?php require '../vendor/autoload.php'; // 利用クラスエイリアス use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use Box\Spout\Writer\Common\Creator\Style\StyleBuilder; use Box\Spout\Common\Entity\Style\CellAlignment; use Box\Spout\Common\Entity\Style\Color; // XLSX書込クラス生成 $writer = WriterEntityFactory::createXLSXWriter(); // 書込みファイル指定 $writer->openToFile('test3-1.xlsx'); // StyleBuilderでスタイル生成 $style1 = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setFontSize(15) ->setFontColor(Color::BLUE) ->build(); $style2 = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setFontSize(15) ->setFontColor(Color::RED) ->build(); $style3 = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setFontSize(15) ->setFontColor(Color::GREEN) ->build(); // セルデータ $cells = [ WriterEntityFactory::createCell('A001', $style1), WriterEntityFactory::createCell('B002', $style2), WriterEntityFactory::createCell('C003', $style3), ]; // 行データ $singleRow = WriterEntityFactory::createRow($cells); // 行データを3行追加 $writer->addRow($singleRow); $writer->addRow($singleRow); $writer->addRow($singleRow); // エクセルファイルの書込 $writer->close(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
同じ内容ですが、3行のデータが追加されたことが分かります。
■行データへのスタイル設定を追加した例
行データの生成は WriterEntityFactory::createRow() 関数で行いますがこの関数の第2引数にはスタイルの設定値を指定できます。
// createRow宣言 public static function createRow(array $cells = [], Style $rowStyle = null) // $cells : セルデータ配列 // $rowStyle : 行スタイル(デフォルトはNULL)
以下のプログラムでは、行スタイル設定で StyleBuilder クラスを生成し「フォントをボールド」「デフォルト」の2種類のスタイルを生成します。 このスタイルを別々に生成したセルデータに対して設定します。
<?php require '../vendor/autoload.php'; // 利用クラスエイリアス use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use Box\Spout\Writer\Common\Creator\Style\StyleBuilder; use Box\Spout\Common\Entity\Style\CellAlignment; use Box\Spout\Common\Entity\Style\Color; // XLSX書込クラス生成 $writer = WriterEntityFactory::createXLSXWriter(); // 書込みファイル指定 $writer->openToFile('test3-2.xlsx'); // StyleBuilderでスタイル生成 $style1 = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setFontSize(15) ->setFontColor(Color::BLUE) ->build(); $style2 = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setFontSize(15) ->setFontColor(Color::RED) ->build(); $style3 = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setFontSize(15) ->setFontColor(Color::GREEN) ->build(); // セルデータ $cells1 = [ WriterEntityFactory::createCell('A001', $style1), WriterEntityFactory::createCell('B002', $style2), WriterEntityFactory::createCell('C003', $style3), ]; $cells2 = [ WriterEntityFactory::createCell('A001', $style1), WriterEntityFactory::createCell('B002', $style2), WriterEntityFactory::createCell('C003', $style3), ]; // 行スタイル生成 // ボールドスタイル $rowStyle1 = (new StyleBuilder()) ->setFontBold() ->build(); // デフォルトのスタイル $rowStyle2 = (new StyleBuilder()) ->build(); // 行データ $singleRow1 = WriterEntityFactory::createRow($cells1, $rowStyle1); $singleRow2 = WriterEntityFactory::createRow($cells2, $rowStyle2); // NGの方法 //$singleRow2 = WriterEntityFactory::createRow($cells1, $rowStyle2); // 行データを追加 $writer->addRow($singleRow1); $writer->addRow($singleRow2); // エクセルファイルの書込 $writer->close(); ?>
「$cells1」のみを使って2個の行スタイル「$rowStyle1」「$rowStyle2」を割り当てて行データを作って、行データ追加を行っても 同じ内容の2行が表示される。(「$singleRow2」の生成を「NGの方法」で行った場合は以下の様になります。)
セルデータを分けて、それぞれに別の行スタイルを設定することでOKな感じになりました。
■スタイル設定の各設定関数について
それでは StyleBuilder クラスのスタイル設定関数を以下に記します。
カテゴリ | 設定 | 関数 |
---|---|---|
Font | Bold | StyleBuilder::setFontBold() |
Italic | StyleBuilder::setFontItalic() | |
Underline | StyleBuilder::setFontUnderline() | |
Strikethrough | StyleBuilder::setFontStrikethrough() | |
Font name | StyleBuilder::setFontName($strFontName):フォント名指定 | |
Font size | StyleBuilder::setFontSize($intFontSize):フォントサイズ指定 | |
Font Color | StyleBuilder::setFontColor(Color::BLUE):カラークラス色名 StyleBuilder::setFontColor(Color::rgb(0, 128, 255)):RGB指定 |
|
Alignment | Cell alignment | StyleBuilder::setCellAlignment(CellAlignment::CENTER) :セルアライメントクラスの名称 |
Wrap text | StyleBuilder::setShouldWrapText(true) | |
Format (XLSX only) |
Number format | StyleBuilder::setFormat('0.000') |
Date format | StyleBuilder::setFormat('yy/mm/dd HH:mm') |
なお、上記の関数は戻り値に自分の StyleBuilder クラスのオブジェクトを返すため、 関数呼び出しのチェインができます。
// StyleBuilderでスタイル生成 $sb = new StyleBuilder(); $style = $sb ->setFontName('MS ゴシック') ->setFontSize(15) ->setFontBold() ->setFontItalic() ->setFontColor(Color::BLUE) ->build();
コメント