エクセルのワークシートのセルにスタイルを設定する説明は以下の記事で行いましたが、今回は複数セルに対するスタイル設定について説明したいと思います。
PHP PhpSpreadsheet エクセルのワークシートのセルのスタイル設定について
■「applyFromArray」を使ったセルのスタイル設定
ワークシートオブジェクト から取得した スタイルオブジェクト の applyFromArray() メソッドで設定するスタイルを array() で与えることが出来ます。
以下に簡単な例を示します。 [A1:D3] のセル範囲の周りに赤色のボーダーで囲む設定を行っています。
<?php
// ライブラリ読込
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Style;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// Spreadsheetオブジェクト生成
$objSpreadsheet = new Spreadsheet();
// ワークシートオブジェクト
$objSheet = $objSpreadsheet->getActiveSheet();
// スタイル設定値array
$styleArray = [
'borders' => [
'outline' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
'color' => ['argb' => 'FFFF0000'],
],
],
];
// [A1:D3]のスタイル設定
$objSheet->getStyle('A1:D3')->applyFromArray($styleArray);
// [test6-a0.xlsx]:Excel2007形式で保存する
$objWriter = new Xlsx($objSpreadsheet);
$objWriter->save('test6-a0.xlsx');
exit();
?>
出力されたエクセルファイルを見てみると以下の様になります。
■「applyFromArray」と「duplicateStyle」を使ったセルのスタイル設定
上記は スタイルオブジェクト の applyFromArray() メソッドでスタイルを設定する処理でしたが、 指定したセル範囲を一つのセルと考えてのスタイルを設定していました。
今度は、指定したセル範囲の全てのセルに対して同じスタイルを設定する方法を示します。
以下の例は スタイルクラス:Style() を生成しその スタイルオブジェクト に applyFromArray() メソッドでスタイルを設定しておきます。
この スタイルオブジェクト を ワークシートオブジェクト の duplicateStyle() メソッドで指定範囲の各セルへのスタイル設定が一括で行えます。
各セルには「文字フォント」「アライメント(水平位置)」「ボーダー(全周枠)」「書式設定(数値)」「ぬりつぶし(色)」のスタイルを設定します。
<?php
// ライブラリ読込
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\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();
// 配列データ
$arrData = array(
array(100, -1100, 12000, 130000), // マイナス値もいれる
array(200, 2100, 22000, -230000),
array(300, 3100, -32000, 330000),
);
// [A1:D3]セルに配列データ設定
$objSheet->fromArray(
$arrData, // 配列データ
NULL, // 配列データの中でセルに設定しないNULL値の指定
'A1' // 左上座標(デフォルト:"A1")
);
// 全部のスタイルの定義
$objStyle = new Style();
$objStyle->applyFromArray(
array(
'font' => array(
'name' => 'Arial',
'bold' => TRUE,
'italic' => FALSE,
'underline' => Font::UNDERLINE_DOUBLE,
'strikethrough' => FALSE,
),
'alignment' => array(
'horizontal' => Alignment::HORIZONTAL_RIGHT
),
'borders' => array(
'top' => array(
'borderStyle' => Border::BORDER_THIN,
),
'bottom' => array(
'borderStyle' => Border::BORDER_THIN,
),
'left' => array(
'borderStyle' => Border::BORDER_THIN,
),
'right' => array(
'borderStyle' => Border::BORDER_THIN,
)
),
'numberFormat' => array(
'formatCode' => '#,##0;[Red]#,##0', // マイナスは赤色
),
'fill' => array(
'fillType' => Fill::FILL_SOLID,
'startColor' => array(
'argb' => '00FFFF80'
)
)
)
);
// セル範囲指定でのスタイル設定
$objSheet->duplicateStyle($objStyle, 'A1:D3');
// [test6-a1.xlsx]:Excel2007形式で保存する
$objWriter = new Xlsx($objSpreadsheet);
$objWriter->save('test6-a1.xlsx');
exit();
?>
出力されたエクセルファイルを見てみると以下の様になります。
コメント