[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
前回の以下の記事で「エクセル出力・セルスタイル設定」を紹介しましたが、今回はさらにセルのボーダー(枠線)設定について説明したいと思います。
⇒PHP Spoutを使用してエクセル出力・セルスタイル設定の方法について
■セルデータへのボーダー(枠線)のスタイル設定について
ボーダー(枠線)のスタイル設定を行うために、ボーダークラスを生成し、そのオブジェクトをスタイルクラスに設定します。
ボーダークラスは BorderBuilder を生成し、そのクラスのボーダーの「上、右、下、左」に対して設定を行います。 ボーダーの「上、右、下、左」に対して別々の関数が用意されていますが、引数は全て同じです。
// setBorderTop宣言 public function setBorderTop($color = Color::BLACK, $width = Border::WIDTH_MEDIUM, $style = Border::STYLE_SOLID) // $color : ボーダーカラー (カラー宣言もしくはRGB値指定:デフォルトは黒) // $width : ボーダー幅 (デフォルトはWIDTH_MEDIUM) // $style : ボーダースタイル(デフォルトはSTYLE_SOLID) //「以下の関数の引数も同様」 // setBorderRight宣言 public function setBorderRight($color = Color::BLACK, $width = Border::WIDTH_MEDIUM, $style = Border::STYLE_SOLID) // setBorderBottom宣言 public function setBorderBottom($color = Color::BLACK, $width = Border::WIDTH_MEDIUM, $style = Border::STYLE_SOLID) // setBorderLeft宣言 public function setBorderLeft($color = Color::BLACK, $width = Border::WIDTH_MEDIUM, $style = Border::STYLE_SOLID)
実際には BorderBuilder でボーダーを生成し、ボーダー設定を行ってから build 関数でボーダー値を作成します。
そのボーダー値を StyleBuilder クラスを生成したものに setBorder 関数で設定を行ってから build 関数でスタイル値を作成します。
以下の様な感じです。
use Box\Spout\Common\Entity\Style\Border; use Box\Spout\Writer\Common\Creator\Style\BorderBuilder; use Box\Spout\Writer\Common\Creator\Style\StyleBuilder; // BorderBuilderでボーダー生成(ボーダー「上」のみ設定:「青色」「細い幅」「実線」) $border = (new BorderBuilder()) ->setBorderTop(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->build(); // StyleBuilderでスタイル生成 $style = (new StyleBuilder()) ->setBorder($border) ->build();
■セルデータへのボーダー・スタイル設定による簡単な例
以下のプログラムでは、 BorderBuilder クラスを生成し「上、右、下」のボーダーには「カラー:青(宣言値)、幅:太い、線種:実線」の設定を行っています。 また、「左」のみ「カラー」設定で rgb() 関数で「red、green、blue」の値を設定します。
このボーダー値を StyleBuilder で生成されたスタイルに設定しています。
<?php require '../vendor/autoload.php'; // 利用クラスエイリアス use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use Box\Spout\Common\Entity\Style\Border; use Box\Spout\Writer\Common\Creator\Style\BorderBuilder; 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('test4-1.xlsx'); // ボーダー生成 $border = (new BorderBuilder()) ->setBorderTop(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->setBorderRight(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->setBorderBottom(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->setBorderLeft(Color::rgb(255, 0, 0), Border::WIDTH_THICK, Border::STYLE_SOLID) ->build(); // StyleBuilderでスタイル生成 $style1 = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setBorder($border) ->setFontSize(15) ->setFontColor(Color::BLUE) ->build(); $style2 = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setBorder($border) ->setFontSize(15) ->setFontColor(Color::RED) ->build(); $style3 = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setBorder($border) ->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(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
各セルの左側の枠線が赤色に設定されたことが分かります。
■行データへのボーダー・スタイル設定を追加した例
行データの生成は WriterEntityFactory::createRow() 関数で行いますがこの関数の第2引数にはスタイルの設定値を指定できます。
// createRow宣言 public static function createRow(array $cells = [], Style $rowStyle = null) // $cells : セルデータ配列 // $rowStyle : 行スタイル(デフォルトはNULL)
以下のプログラムでは、行スタイル設定で StyleBuilder クラスを生成しボーダーのみのスタイルを生成します。 このスタイルを行データに対して設定します。
<?php require '../vendor/autoload.php'; // 利用クラスエイリアス use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use Box\Spout\Common\Entity\Style\Border; use Box\Spout\Writer\Common\Creator\Style\BorderBuilder; 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('test4-2.xlsx'); // ボーダー生成 $border = (new BorderBuilder()) ->setBorderTop(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->setBorderRight(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->setBorderBottom(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->setBorderLeft(Color::rgb(255, 0, 0), Border::WIDTH_THICK, Border::STYLE_SOLID) ->build(); // StyleBuilderでスタイル生成 $style = (new StyleBuilder()) ->setBorder($border) ->build(); // セルデータ $cells = [ WriterEntityFactory::createCell('A001'), WriterEntityFactory::createCell('B002'), WriterEntityFactory::createCell('C003'), ]; // 行データ(スタイル設定付加) $singleRow = WriterEntityFactory::createRow($cells, $style); // 行データを3行追加 $writer->addRow($singleRow); $writer->addRow($singleRow); $writer->addRow($singleRow); // エクセルファイルの書込 $writer->close(); ?>
これを実行すると以下の様になります。
フォント名、フォントサイズ設定は行っていないので spout のデフォルト値「Calibri」になっているので、上の方の例より文字が小さい感じです。
なお、次の項目ではシート全体にフォント設定を行って「Calibri」を「MS ゴシック」にします。
■シート全体にスタイル設定を行う
シート全体にスタイル設定を行うには BorderBuilder クラスを生成し各種のスタイルを設定した スタイルオブジェクトを XLSX書込クラス の setDefaultRowStyle 関数で設定します。
<?php require '../vendor/autoload.php'; // 利用クラスエイリアス use Box\Spout\Writer\Common\Creator\WriterEntityFactory; use Box\Spout\Common\Entity\Style\Border; use Box\Spout\Writer\Common\Creator\Style\BorderBuilder; 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(); // XLSX書込クラスへのデフォルトスタイル $defaultStyle = (new StyleBuilder()) ->setFontName('MS ゴシック') ->setFontSize(14) ->build(); // XLSX書込クラスへのデフォルトスタイル $writer->setDefaultRowStyle($defaultStyle); // 書込みファイル指定 $writer->openToFile('test4-3.xlsx'); // ボーダー生成 $border = (new BorderBuilder()) ->setBorderTop(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->setBorderRight(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->setBorderBottom(Color::BLUE, Border::WIDTH_THICK, Border::STYLE_SOLID) ->setBorderLeft(Color::rgb(255, 0, 0), Border::WIDTH_THICK, Border::STYLE_SOLID) ->build(); // StyleBuilderでスタイル生成 $style = (new StyleBuilder()) ->setBorder($border) ->build(); // セルデータ $cells = [ WriterEntityFactory::createCell('A001'), WriterEntityFactory::createCell('B002'), WriterEntityFactory::createCell('C003'), ]; // 行データ $singleRow = WriterEntityFactory::createRow($cells, $style); // 行データを3行追加 $writer->addRow($singleRow); $writer->addRow($singleRow); $writer->addRow($singleRow); // エクセルファイルの書込 $writer->close(); ?>
これを実行すると以下の様になります。
先ほどのフォントとは異なるので、表示される文字の雰囲気が変わっています。 また、現在の「A5」セルのフォントはエクセルのメニューリボンに「MS ゴシック」とフォント名が表示されています。
コメント