[2021/07/29] PHP 標準関数その4・文字列の分割(explode)で空文字列を処理して再認識した件について (No.278)
[2020/12/21] PHP PhpSpreadsheet エクセルのワークシートのセルの罫線はスタイルオブジェクトの applyFromArray でも行える (No.252)
[2020/12/21] PHP PhpSpreadsheet\Chart ワークシート上のチャート位置の調整について (No.251)
[2020/12/18] PHP PHPExcel_Chart ワークシート上のチャート位置の調整について (No.250)
[2020/12/18] PHP PHPExcel エクセルのワークシートのセルの罫線はスタイルオブジェクトの applyFromArray で確実に行える (No.249)
-
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
-
文字列の分割を行う関数の説明は以下の記事で行いましたが、今回は少し気になった件に付いて記します。
⇒PHP 標準関数その1・文字列の分割・結合を行う関数(explode, implode)について
■一般的なexplode関数の使い方
先ずは explode 関数の一般的な使い方ですが、以下の様なソースを作成します。
<?php /* f1-explode.php */ // 分割する文字列 $str = "東京,名古屋,京都,大阪"; // 分割処理 $arr = explode(",", $str); // 配列の内容表示 echo "<pre>"; var_dump($arr); echo "</pre>"; ?>
これをブラウザで実行すると以下の表示になります。
array(4) { [0]=> string(6) "東京" [1]=> string(9) "名古屋" [2]=> string(6) "京都" [3]=> string(6) "大阪" }
変数「$arr」に指標「0」から順にカンマで分割された文字列が設定されています。
これ自体は特に問題は無いのですが explode 関数に渡す文字列が null または 空文字列(長さが 0 の文字列) の場合は どうなるのでしょうか。
■nullをexplode関数で分解処理
それでは早速やってみます。上記のソースの文字列を null に変えます。
<?php $str = null; // 分割処理 $arr = explode(",", $str); // 配列の内容表示 echo "<pre>"; var_dump($arr); echo "</pre>"; ?>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
array(1) { [0]=> string(0) "" }
KEYが「0」で内容が空文字列の要素が「1件」の配列が返されます。
なお null の部分を空文字列に変更しても同様の結果となります。<?php $str = ""; // 分割処理 $arr = explode(",", $str); // 配列の内容表示 echo "<pre>"; var_dump($arr); echo "</pre>"; ?>
この結果から文字列に何かのデータが設定されていて、それを分解して使う場合、 null または 空文字列 だと1件の文字列が在ることになってしまいます。
もし、それでもいいのならば問題にはならないのですが、 不都合であれば、分解処理の前に対象文字列を null または 空文字列 の判定を行って 別処理を行う必要があります。
PR -
セルの罫線を設定する処理で以下の様なスクリプトで行っていましたが、少し処理が冗長な感じがします。<?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(); ?>
出力されたエクセルファイルを見てみると以下の様になります。指定セルが全て同じ罫線の状態になります。
-
今回は生成する「チャート」の位置の調整について説明したいと思います。
PhpSpreadsheet の説明の初回の記事で用いたプログラムをそのまま利用します。(以下のリンク)
⇒PHP PhpSpreadsheet ワークシート上にチャート(グラフ)を作成する方法について(PhpSpreadsheet\Chart)
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Chart\Chart; use PhpOffice\PhpSpreadsheet\Chart\DataSeries; use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues; use PhpOffice\PhpSpreadsheet\Chart\PlotArea; use PhpOffice\PhpSpreadsheet\Chart\Title; use PhpOffice\PhpSpreadsheet\IOFactory; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト取得 $objWorksheet = $objSpreadsheet->getActiveSheet(); // チャート用テストデータ生成 $objWorksheet->fromArray( array( array('売上' , 2016, 2017, 2018, 2019, 2020), array('商品1', 12, 15, 21, 18, 20), ) ); // X軸ラベルの指定 $arrCategorysDataSeries = array( new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1:$F$1', NULL, 5), // 2016 to 2020 ); // 描画データの指定 $arrDataSeriesValues = array( new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$F$2', NULL, 5), ); // チャート・データシリーズの生成 $objSeries = new DataSeries( DataSeries::TYPE_LINECHART, // plotType NULL, // plotGrouping(DataSeries::GROUPING_STANDARD) range(0, count($arrDataSeriesValues) - 1), // plotOrder array(), // plotLabel $arrCategorysDataSeries, // plotCategory $arrDataSeriesValues // plotValues ); // プロットエリアにチャート・データシリーズに設定 $objPlotArea = new PlotArea(NULL, array($objSeries)); // チャート・タイトル生成 $objTitle = new Title('売上データ'); // チャート生成 $objChart = new Chart( 'chart1', // name $objTitle, // title NULL, // legend $objPlotArea, // plotArea TRUE, // plotVisibleOnly 0, // displayBlanksAs NULL, // xAxisLabel NULL // yAxisLabel ); // ワークシート内のチャート位置設定 $objChart->setTopLeftPosition('A6'); // 左上 $objChart->setBottomRightPosition('G18'); // 右下 // ワークシートにチャート追加 $objWorksheet->addChart($objChart); // [test-g-1.xlsx]:Excel2007形式で保存する $objWriter = IOFactory::createWriter($objSpreadsheet, 'Xlsx'); $objWriter->setIncludeCharts(TRUE); $objWriter->save('test-g-1.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
このプログラムの59,60行目でチャート位置設定を行っていますが、 チャートオブジェクトの setTopLeftPosition、setBottomRightPosition メソッドの引数にはセル位置の後に X方向、Y方向 の引数があります。
メソッドの引数は以下の様に定義されています。public function setTopLeftPosition($cell, $xOffset = null, $yOffset = null) public function setBottomRightPosition($cell, $xOffset = null, $yOffset = null) $cell :セルアドレス $xOffset:X方向のオフセット(相対値:ピクセル値?) $yOffset:Y方向のオフセット(相対値:ピクセル値?)
X方向、Y方向のオフセットを設定してプログラムを直してみます。<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Chart\Chart; use PhpOffice\PhpSpreadsheet\Chart\DataSeries; use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues; use PhpOffice\PhpSpreadsheet\Chart\PlotArea; use PhpOffice\PhpSpreadsheet\Chart\Title; use PhpOffice\PhpSpreadsheet\IOFactory; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト取得 $objWorksheet = $objSpreadsheet->getActiveSheet(); // チャート用テストデータ生成 $objWorksheet->fromArray( array( array('売上' , 2016, 2017, 2018, 2019, 2020), array('商品1', 12, 15, 21, 18, 20), ) ); // X軸ラベルの指定 $arrCategorysDataSeries = array( new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1:$F$1', NULL, 5), // 2016 to 2020 ); // 描画データの指定 $arrDataSeriesValues = array( new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$F$2', NULL, 5), ); // チャート・データシリーズの生成 $objSeries = new DataSeries( DataSeries::TYPE_LINECHART, // plotType NULL, // plotGrouping(DataSeries::GROUPING_STANDARD) range(0, count($arrDataSeriesValues) - 1), // plotOrder array(), // plotLabel $arrCategorysDataSeries, // plotCategory $arrDataSeriesValues // plotValues ); // プロットエリアにチャート・データシリーズに設定 $objPlotArea = new PlotArea(NULL, array($objSeries)); // チャート・タイトル生成 $objTitle = new Title('売上データ'); // チャート生成 $objChart = new Chart( 'chart1', // name $objTitle, // title NULL, // legend $objPlotArea, // plotArea TRUE, // plotVisibleOnly 0, // displayBlanksAs NULL, // xAxisLabel NULL // yAxisLabel ); // ワークシート内のチャート位置設定 $objChart->setTopLeftPosition('A6', 32, 10); // 左上 $objChart->setBottomRightPosition('G18', 32, 10); // 右下 // ワークシートにチャート追加 $objWorksheet->addChart($objChart); // [test-g-9-2.xlsx]:Excel2007形式で保存する $objWriter = IOFactory::createWriter($objSpreadsheet, 'Xlsx'); $objWriter->setIncludeCharts(TRUE); $objWriter->save('test-g-9-2.xlsx'); exit(); ?>
オフセットはピクセルの値の様なので、左上、右下共にX方向は32ピクセルで、Y方向は10ピクセルにしました。
32ピクセル及び10ピクセルはセルの幅が64ピクセルで、高さが20ピクセルなので半分の値です。
出力されたエクセルファイルを見てみると以下の様になります。
指定された値の位置に行っている様な感じですが、右下が少し怪しいです。 ここは出力されたチャートの位置をみて微調整が必要かもしれません。
-
今回は生成する「チャート」の位置の調整について説明したいと思います。
PHPExcel_Chart の説明の初回の記事で用いたプログラムをそのまま利用します。(以下のリンク)
⇒PHP PHPExcel ワークシート上にチャート(グラフ)を作成する方法について(PHPExcel_Chart)
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objPHPExcel = new PHPExcel(); // ワークシートオブジェクト取得 $objWorksheet = $objPHPExcel->getActiveSheet(); // チャート用テストデータ生成 $objWorksheet->fromArray( array( array('売上' , 2016, 2017, 2018, 2019, 2020), array('商品1', 12, 15, 21, 18, 20), ) ); // X軸ラベルの指定 $arrCategorysDataSeries = array( new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1:$F$1', NULL, 5), // 2016 to 2020 ); // 描画データの指定 $arrDataSeriesValues = array( new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$F$2', NULL, 5), ); // チャート・データシリーズの生成 $objSeries = new PHPExcel_Chart_DataSeries( PHPExcel_Chart_DataSeries::TYPE_LINECHART, // plotType NULL, // plotGrouping range(0, count($arrDataSeriesValues) - 1), // plotOrder NULL, // plotLabel $arrCategorysDataSeries, // plotCategory $arrDataSeriesValues // plotValues ); // プロットエリアにチャート・データシリーズに設定 $objPlotArea = new PHPExcel_Chart_PlotArea(NULL, array($objSeries)); // チャート・タイトル生成 $objTitle = new PHPExcel_Chart_Title('売上データ'); // チャート生成 $objChart = new PHPExcel_Chart( 'chart1', // name $objTitle, // title NULL, // legend $objPlotArea, // plotArea TRUE, // plotVisibleOnly 0, // displayBlanksAs NULL, // xAxisLabel NULL // yAxisLabel ); // ワークシート内のチャート位置設定 $objChart->setTopLeftPosition('A6'); // 左上 $objChart->setBottomRightPosition('G18'); // 右下 // ワークシートにチャート追加 $objWorksheet->addChart($objChart); // [test-g-1.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); $objWriter->setIncludeCharts(TRUE); $objWriter->save('test-g-1.xlsx'); exit(); ?>
出力されたエクセルファイルを見てみると以下の様になります。
このプログラムの51,52行目でチャート位置設定を行っていますが、 チャートオブジェクトの setTopLeftPosition、setBottomRightPosition メソッドの引数にはセル位置の後に X方向、Y方向 の引数があります。
メソッドの引数は以下の様に定義されています。public function setTopLeftPosition($cell, $xOffset = null, $yOffset = null) public function setBottomRightPosition($cell, $xOffset = null, $yOffset = null) $cell :セルアドレス $xOffset:X方向のオフセット(相対値:ピクセル値?) $yOffset:Y方向のオフセット(相対値:ピクセル値?)
X方向、Y方向のオフセットを設定してプログラムを直してみます。<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objPHPExcel = new PHPExcel(); // ワークシートオブジェクト取得 $objWorksheet = $objPHPExcel->getActiveSheet(); // チャート用テストデータ生成 $objWorksheet->fromArray( array( array('売上' , 2016, 2017, 2018, 2019, 2020), array('商品1', 12, 15, 21, 18, 20), ) ); // X軸ラベルの指定 $arrCategorysDataSeries = array( new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1:$F$1', NULL, 5), // 2016 to 2020 ); // 描画データの指定 $arrDataSeriesValues = array( new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$F$2', NULL, 5), ); // チャート・データシリーズの生成 $objSeries = new PHPExcel_Chart_DataSeries( PHPExcel_Chart_DataSeries::TYPE_LINECHART, // plotType NULL, // plotGrouping range(0, count($arrDataSeriesValues) - 1), // plotOrder NULL, // plotLabel $arrCategorysDataSeries, // plotCategory $arrDataSeriesValues // plotValues ); // プロットエリアにチャート・データシリーズに設定 $objPlotArea = new PHPExcel_Chart_PlotArea(NULL, array($objSeries)); // チャート・タイトル生成 $objTitle = new PHPExcel_Chart_Title('売上データ'); // チャート生成 $objChart = new PHPExcel_Chart( 'chart1', // name $objTitle, // title NULL, // legend $objPlotArea, // plotArea TRUE, // plotVisibleOnly 0, // displayBlanksAs NULL, // xAxisLabel NULL // yAxisLabel ); // ワークシート内のチャート位置設定 $objChart->setTopLeftPosition('A6', 32, 10); // 左上 $objChart->setBottomRightPosition('G18', 32, 10); // 右下 // ワークシートにチャート追加 $objWorksheet->addChart($objChart); // [test-g-9-2.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); $objWriter->setIncludeCharts(TRUE); $objWriter->save('test-g-9-2.xlsx'); exit(); ?>
オフセットはピクセルの値の様なので、左上、右下共にX方向は32ピクセルで、Y方向は10ピクセルにしました。
32ピクセル及び10ピクセルはセルの幅が64ピクセルで、高さが20ピクセルなので半分の値です。
出力されたエクセルファイルを見てみると以下の様になります。
指定された値の位置に行っている様な感じですが、右下が少し怪しいです。 ここは出力されたチャートの位置をみて微調整が必要かもしれません。
-
以前、セルの罫線を設定する処理で以下の様なスクリプトで行っていましたが、どうも罫線が出力されない様です。<?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(); ?>
出力されたエクセルファイルを見てみると以下の様になります。指定セルが全て同じ罫線の状態になります。