忍者ブログ

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

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

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


以前、セルの罫線を設定する処理で以下の様なスクリプトで行っていましたが、どうも罫線が出力されない様です。

<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->getActiveSheet();

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

// [test12-1.xlsx]:Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test12-1.xlsx');
exit();
?>

この処理では罫線が出力されないので、スタイルオブジェクトの applyFromArray() メソッドを使用することで 確実に処理できる様です。
このメソッドの引数は配列データですが、以下の様な指定をします。

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

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

<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->getActiveSheet();

// スタイルオブジェクト取得([B2]セル)
$objStyle = $objSheet->getStyle('B2');
//  引き数
$arrStyle = array(
	'borders' => array(
		'top'    => array(
		                'style' => PHPExcel_Style_Border::BORDER_THICK,
		                'color' => array( 'rgb' => 'ff0000' )
		            ),
		'right'  => array(
		                'style' => PHPExcel_Style_Border::BORDER_THICK,
		                'color' => array( 'rgb' => '00ff00' )
		            ),
		'left'   => array(
		                'style' => PHPExcel_Style_Border::BORDER_THICK,
		                'color' => array( 'rgb' => '0000ff' )
		            ),
		'bottom' => array(
		                'style' => PHPExcel_Style_Border::BORDER_THICK,
		                'color' => array( 'rgb' => 'ff00ff' )
		            )
	)
);
//  セルの罫線スタイル設定
$objStyle->applyFromArray($arrStyle);

// スタイルオブジェクト取得([B4:F4]セル)
$objStyle = $objSheet->getStyle('B4:F4');
//  セルの罫線スタイル設定
$objStyle->applyFromArray($arrStyle);

// [test12-1.xlsx]:Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test12-1.xlsx');
exit();
?>

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


applyFromArray() の配列引数の中で、'top' 'right' 'left' 'bottom' が同一の指定であれば 'allborders' と指定することもできます。

<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->getActiveSheet();

// スタイルオブジェクト取得([B2]セル)
$objStyle = $objSheet->getStyle('B2');
//  引き数
$arrStyle = array(
	'borders' => array(
		'allborders' => array(
		                'style' => PHPExcel_Style_Border::BORDER_THICK,
		                'color' => array( 'rgb' => 'ff0000' )
		            )
	)
);
//  セルの罫線スタイル設定
$objStyle->applyFromArray($arrStyle);

// スタイルオブジェクト取得([B4:F4]セル)
$objStyle = $objSheet->getStyle('B4:F4');
//  セルの罫線スタイル設定
$objStyle->applyFromArray($arrStyle);

// [test12-1.xlsx]:Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test12-2.xlsx');
exit();
?>

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












PR

コメント

コメントを書く