忍者ブログ

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

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

PHP PhpSpreadsheet エクセルのワークシートのセルの罫線はスタイルオブジェクトの applyFromArray でも行える


セルの罫線を設定する処理で以下の様なスクリプトで行っていましたが、少し処理が冗長な感じがします。

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

// スタイルオブジェクト取得([B2:D4]セル)
$objStyle = $objSheet->getStyle('B2:D4');
// ボーダーオブジェクト取得([B2]セル)
$objBorders = $objStyle->getBorders();
// ボーダー全て(Top, Bottom, Left, Right)を「細い線:BORDER_THICK」に設定
$objBorders->getTop()->setBorderStyle(Border::BORDER_THICK);
$objBorders->getTop()->setColor(new Color(Color::COLOR_RED));   //  例として色設定
$objBorders->getBottom()->setBorderStyle(Border::BORDER_THICK);
$objBorders->getLeft()->setBorderStyle(Border::BORDER_THICK);
$objBorders->getRight()->setBorderStyle(Border::BORDER_THICK);

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

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



この冗長な処理の部分を、スタイルオブジェクトの applyFromArray() メソッドを使用することで 一括で処理できる様です。
このメソッドの引数は配列データですが、以下の様な指定をします。
PHPExcel ライブラリと較べて少し変わった部分があります。 'border' という配列KEYが 'borderStyle' に変わったので注意が必要です。

array(
    'borders' => array(
    	'top'    => array(
		    'borderStyle' => Border::BORDER_THIN			//	ボーダーの定数
		    ,['color' => array( 'rgb' => 'xxxxxx' ) ]	//	色は未指定はデフォルト(黒)
		),
    	'bottom' => array(
		    'borderStyle' => Border::BORDER_THIN
		    ,['color' => array( 'rgb' => 'xxxxxx' ) ]
		),
    	'left' => array(
		    'borderStyle' => Border::BORDER_THIN
		    ,['color' => array( 'rgb' => 'xxxxxx' ) ]
		),
    	'right' => array(
		    'borderStyle' => Border::BORDER_THIN
		    ,['color' => array( 'rgb' => 'xxxxxx' ) ]
		),
	)
)

それではこのメソッドを使って罫線を出力してみます。

<?php
// ライブラリ読込
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// Spreadsheetオブジェクト生成
$objSpreadsheet = new Spreadsheet();
// ワークシートオブジェクト
$objSheet = $objSpreadsheet->getActiveSheet();
// スタイルオブジェクト取得([B2:D4]セル)
$objStyle = $objSheet->getStyle('B2:D4');
//  
$arrStyle = array(
	'borders' => array(
		'top'    => array(
		                'borderStyle' => Border::BORDER_THICK,
		                'color' => array( 'rgb' => 'ff0000' )
		            ),
		'right'  => array(
		                'borderStyle' => Border::BORDER_THICK,
		                'color' => array( 'rgb' => '00ff00' )
		            ),
		'left'   => array(
		                'borderStyle' => Border::BORDER_THICK,
		                'color' => array( 'rgb' => '0000ff' )
		            ),
		'bottom' => array(
		                'borderStyle' => Border::BORDER_THICK,
		                'color' => array( 'rgb' => 'ff00ff' )
		            )
	)
);
//  セルの罫線スタイル設定
$objStyle->applyFromArray($arrStyle);

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

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


applyFromArray() の配列引数の中で、'top' 'right' 'left' 'bottom' が同一の指定であれば 'allBorders' と指定することもできます。
PHPExcel ライブラリでは 'allborders' という配列KEYだったのですが 'allBorders' に変わったので注意が必要です。 (単語の意味が変わるところで大文字化?)

<?php
// ライブラリ読込
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// Spreadsheetオブジェクト生成
$objSpreadsheet = new Spreadsheet();
// ワークシートオブジェクト
$objSheet = $objSpreadsheet->getActiveSheet();
// スタイルオブジェクト取得([B2:D4]セル)
$objStyle = $objSheet->getStyle('B2:D4');
//  
$arrStyle = array(
	'borders' => array(
		'allBorders' => array(
		                'borderStyle' => Border::BORDER_THICK,
		                'color' => array( 'rgb' => 'ff0000' )
		            )
	)
);
//  セルの罫線スタイル設定
$objStyle->applyFromArray($arrStyle);

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

出力されたエクセルファイルを見てみると以下の様になります。指定セルが全て同じ罫線の状態になります。












PR

コメント

コメントを書く