忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP PhpSpreadsheet エクセルのワークシートのセルのスタイル設定について


今回は PhpSpreadsheet で行う「ワークシート」の 「セルのスタイル設定」 について説明したいと思います。




■セルの文字配置、前景色、背景色の設定

セルの文字配置、前景色、背景色等の設定は、ワークシートオブジェクトからスタイルオブジェクトを取得し、 そのスタイルオブジェクトから更に各指定用のオブジェクトを取得し、各値を設定します。

「文字配置・右寄せ」の設定は、スタイルオブジェクトからアライメントオブジェクトを取得し setHorizontal() メソッドを使用して行います。

「前景色」の設定は、スタイルオブジェクトからフォントオブジェクトを取得し、更にフォントオブジェクトから色オブジェクトを取得し setARGB() メソッドを使用して行います。

「背景色」の設定のためにまずは、セルの枠の設定を行います。 スタイルオブジェクトからボーダーオブジェクトを取得し、更にボーダーTop(Bottom,Left,Right)オブジェクトから個別ボーダーオブジェクトを取得し setBorderStyle() メソッドを使用して行います。

「背景色」の設定は、スタイルオブジェクトからフィルオブジェクトを取得し setFillType() メソッドで塗りつぶしのタイプを設定し、 フィルオブジェクトから色オブジェクトを取得し setARGB() メソッドを使用して行います。

<?php
// ライブラリ読込
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style;
use PhpOffice\PhpSpreadsheet\Style\Color;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// Spreadsheetオブジェクト生成
$objSpreadsheet = new Spreadsheet();
// ワークシートオブジェクト
$objSheet = $objSpreadsheet->getActiveSheet();

// スタイルオブジェクト取得([B2]セル)
$objStyle = $objSheet->getStyle('B2');
// フォアグランド(前景)色を「白色」に設定
$objStyle->getFont()->getColor()->setARGB(Color::COLOR_WHITE);
// 水平アライメントを「右寄せ」に設定
$objStyle->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT);
//$objStyle->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT);

// ボーダーオブジェクト取得([B2]セル)
$objBorders = $objStyle->getBorders();
// ボーダー全て(Top, Bottom, Left, Right)を「細い線:BORDER_THICK」に設定
$objBorders->getTop()->setBorderStyle(Border::BORDER_THICK);
$objBorders->getBottom()->setBorderStyle(Border::BORDER_THICK);
$objBorders->getLeft()->setBorderStyle(Border::BORDER_THICK);
$objBorders->getRight()->setBorderStyle(Border::BORDER_THICK);

// フィルオブジェクト取得([B2]セル)
$objFill = $objStyle->getFill();
// 背景のタイプを「塗つぶし」に設定
$objFill->setFillType(Fill::FILL_SOLID);
// 背景色を「赤」に設定
$objFill->getStartColor()->setARGB('FFFF0000');

// [B2]セルに文字列設定
$objSheet->setCellValue('B2', 'ABCDEF');

// [test6-1.xlsx]:Excel2007形式で保存する
$objWriter = new Xlsx($objSpreadsheet);
$objWriter->save('test6-1.xlsx');
exit();
?>

出力されたエクセルファイルを見てみると以下の様になります。


アライメントの定数は以下の様に「Alignmentクラス」に宣言されています。

// Horizontal alignment styles
const HORIZONTAL_GENERAL = 'general';						// 標準
const HORIZONTAL_LEFT = 'left';								// 左詰め
const HORIZONTAL_RIGHT = 'right';							// 右詰め
const HORIZONTAL_CENTER = 'center';							// 中央揃え
const HORIZONTAL_CENTER_CONTINUOUS = 'centerContinuous';	// 選択範囲内で中央
const HORIZONTAL_JUSTIFY = 'justify';						// 均等割り付け
const HORIZONTAL_FILL = 'fill';								// 
const HORIZONTAL_DISTRIBUTED = 'distributed'; // Excel2007 only

// Vertical alignment styles
const VERTICAL_BOTTOM = 'bottom';							// 下詰め
const VERTICAL_TOP = 'top';                                 // 上詰め
const VERTICAL_CENTER = 'center';                           // 中央揃え
const VERTICAL_JUSTIFY = 'justify';                         // 均等割り付け
const VERTICAL_DISTRIBUTED = 'distributed'; // Excel2007 only

ボーダーの定数は以下の様に「Borderクラス」に宣言されています。

// Border style
const BORDER_NONE 			= 'none';
const BORDER_DASHDOT 		= 'dashDot';
const BORDER_DASHDOTDOT 	= 'dashDotDot';
const BORDER_DASHED 		= 'dashed';
const BORDER_DOTTED 		= 'dotted';
const BORDER_DOUBLE 		= 'double';
const BORDER_HAIR 			= 'hair';
const BORDER_MEDIUM 		= 'medium';
const BORDER_MEDIUMDASHDOT 	= 'mediumDashDot';
const BORDER_MEDIUMDASHDOTDOT = 'mediumDashDotDot';
const BORDER_MEDIUMDASHED 	= 'mediumDashed';
const BORDER_SLANTDASHDOT 	= 'slantDashDot';
const BORDER_THICK 			= 'thick';
const BORDER_THIN 			= 'thin';

フィルの定数は以下の様に「Fillクラス」に宣言されています。

// Fill types
const FILL_NONE                    = 'none';
const FILL_SOLID                   = 'solid';
const FILL_GRADIENT_LINEAR         = 'linear';
const FILL_GRADIENT_PATH           = 'path';
const FILL_PATTERN_DARKDOWN        = 'darkDown';
const FILL_PATTERN_DARKGRAY        = 'darkGray';
const FILL_PATTERN_DARKGRID        = 'darkGrid';
const FILL_PATTERN_DARKHORIZONTAL  = 'darkHorizontal';
const FILL_PATTERN_DARKTRELLIS     = 'darkTrellis';
const FILL_PATTERN_DARKUP          = 'darkUp';
const FILL_PATTERN_DARKVERTICAL    = 'darkVertical';
const FILL_PATTERN_GRAY0625        = 'gray0625';
const FILL_PATTERN_GRAY125         = 'gray125';
const FILL_PATTERN_LIGHTDOWN       = 'lightDown';
const FILL_PATTERN_LIGHTGRAY       = 'lightGray';
const FILL_PATTERN_LIGHTGRID       = 'lightGrid';
const FILL_PATTERN_LIGHTHORIZONTAL = 'lightHorizontal';
const FILL_PATTERN_LIGHTTRELLIS    = 'lightTrellis';
const FILL_PATTERN_LIGHTUP         = 'lightUp';
const FILL_PATTERN_LIGHTVERTICAL   = 'lightVertical';
const FILL_PATTERN_MEDIUMGRAY      = 'mediumGray';



■セルの指定に範囲を設定

ワークシートオブジェクトからスタイルオブジェクトを取得する getStyle() メソッドで セルの範囲を示す引数を渡すことで、複数のセルに対するスタイルオブジェクトが取得できます。
このスタイルオブジェクトを使って、各種のメソッドを使うことでセル範囲のスタイルを一括で設定できます。

<?php
// ライブラリ読込
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// Spreadsheetオブジェクト生成
$objSpreadsheet = new Spreadsheet();
// ワークシートオブジェクト
$objSheet = $objSpreadsheet->getActiveSheet();

// スタイルオブジェクト取得([B2~C6の範囲]セル)
$objStyle = $objSheet->getStyle('B2:C6');

// フィルオブジェクト取得([B2]セル)
$objFill = $objStyle->getFill();
// 背景のタイプを「塗つぶし」に設定
$objFill->setFillType(Fill::FILL_SOLID);
// 背景色を「赤」に設定
$objFill->getStartColor()->setARGB('FFFF0000');

// [test6-2.xlsx]:Excel2007形式で保存する
$objWriter = new Xlsx($objSpreadsheet);
$objWriter->save('test6-2.xlsx');
exit();
?>

出力されたエクセルファイルを見てみると以下の様になります。



■セルのスタイル設定を配列値で設定

PHPExcel ライブラリとは異なりワークシートオブジェクトから取得したスタイルオブジェクトからさらに フォントアライメントフィルボーダ 各オブジェクトを取得します。
その後、それらのオブジェクトの applyFromArray() メソッドで設定するスタイルを array() で与えることが出来ます。

<?php
// ライブラリ読込
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Font;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// Spreadsheetオブジェクト生成
$objSpreadsheet = new Spreadsheet();
// ワークシートオブジェクト
$objSheet = $objSpreadsheet->getActiveSheet();

// 全部のスタイルの定義
$arrStyle = array(
	'font' => array(
       'name' => 'Arial',
       'bold' => TRUE,
       'italic' => FALSE,
       'underline' => Font::UNDERLINE_DOUBLE,
       'strikethrough' => FALSE,
       'color' => array(
           'rgb' => '808080'
       )
	),
	'alignment' => array(
		'horizontal' => Alignment::HORIZONTAL_RIGHT,
	),
	'borders' => array(
		'top' => array(
			'style' => Border::BORDER_THIN,
		),
		'bottom' => array(
			'style' => Border::BORDER_THIN,
		),
		'left' => array(
			'style' => Border::BORDER_THIN,
		),
		'right' => array(
			'style' => Border::BORDER_THIN,
		),
	),
	'fill' => array(
		'fillType' => Fill::FILL_SOLID,
//		'rotation' => 0,
		'startColor' => array(
			'argb' => 'FFA0A0A0',
		),
//		'endColor' => array(
//			'argb' => 'FFFFFFFF',
//		),
	),
);

// スタイルオブジェクト取得([B2]セル)
$objStyle = $objSheet->getStyle('B2');
// スタイルの設定([B2]セル)
$objStyle->getFont()->applyFromArray($arrStyle['font']);
$objStyle->getAlignment()->applyFromArray($arrStyle['alignment']);
$objStyle->getBorders()->applyFromArray($arrStyle['borders']);
$objStyle->getFill()->applyFromArray($arrStyle['fill']);

// スタイルオブジェクト取得([C4:D6]セル)
$objStyle = $objSheet->getStyle('C4:D6');
// スタイルの設定([C4:D6]セル)
$objStyle->getFont()->applyFromArray($arrStyle['font']);
$objStyle->getAlignment()->applyFromArray($arrStyle['alignment']);
$objStyle->getBorders()->applyFromArray($arrStyle['borders']);
$objStyle->getFill()->applyFromArray($arrStyle['fill']);

// [test6-3.xlsx]:Excel2007形式で保存する
$objWriter = new Xlsx($objSpreadsheet);
$objWriter->save('test6-3.xlsx');
exit();
?>

出力されたエクセルファイルを見てみると以下の様になります。












PR

コメント

コメントを書く