PHPExcel エクセル表示

エクセル表示テストファイル作成2

前項で、行列のインデックスからセルの値とプロパティを取得するところまで説明しました。
引き続き、エクセル表示テストファイル excel_disp_t.php の後半部分を説明します。
作成ファイル内容は、
63Pear Village に戻り
左サイドナビ「PHPExcel エクセル表示」の中の
PHPExcel エクセル表示テスト PHP ファイル
から見てください。

行列のインデックスからセルの値を取得

行列のインデックス ($j,$i) のセルの値 $tmp0 を取得する方法を説明します。
$tmp0 =
PHPExcel_IOFactory::load($xlsnm) ->
 エクセルファイル読込
setActiveSheetIndex($shtno) ->
 シ-ト番号設定
 ・・・ ここまでは $sheet で設定
getCellByColumnAndRow($j,$i) ->
 セル指定
getCalculatedValue();
 セル内容取得
ちなみに、getValue(); でもセル内容を取得できます。
セル内に文字列が入っている時は問題ないのですが、計算式が入っていたときは、 計算値ではなく、計算式が取得されてしまいます。
まとめると
$tmp0 = $sheet -> getCellByColumnAndRow($j,$i) -> getCalculatedValue();
となります。

数値の書式を整える

取得した数値が
1,000.000
だった時、このままだとどう表示されるのでしょうか。
答えは、
1000
となってしまいます。
やっぱり、エクセルで表示されているように表示したいですよね。
エクセルから数値書式を取り出して表示させる方法もあると思うのですが、今回は PHP 関数の
number_format($tmp0,$shousu);
を使用することにしました。
これを使用すると数字を千位毎にグループ化してフォーマットしてくれます。
number_format( )内の
第一引数 $tmp0 には、フォーマットする数値(float型)
第二引数 $shousu には、小数点以下の桁数
を設定します。
でもこの処理を行う前に、$tmp0 が数値がどうかを判定する必要があります。
その処理が、PHP 関数の is_numeric($tmp0)、この処理すると 変数 $tmp0 が数字または数値形式の文字列であるかを調べてくれます。
数値または数値形式の文字列である場合に TRUE、それ以外の場合に FALSE が返ります。
そして、
$tmp0 = $tmp0 * 1.00;
とすると、float型に変換されますので、number_format( )処理がうまく実行されます。
ここまでをまとめると
if(is_numeric($tmp0)){
  $tmp0 = $tmp0 * 1.00;
  $tmp0 = number_format($tmp0,$shousu);
}
となります。

セルのプロパティと値の配列を対応させる

ここまで、セルのプロパティと値の配列を作成してきました。
でもその配列のでき方には大きな違いがあります。
たとえば、セル内背景色 $cellst[] 配列は、1次元です。
$cellst[0] = 'FFDEEAF6'
・・・・・・
$cellst[5] = 'FF000000'
のように添字はただ単にどんどん増えていきます。
一方、セルの値 $tmp[][] は、行ごとに列の配列を作っていきます。
$tmp[0] = 'こんにちは'
・・・・・・
と作成した後、
$sheetData[] = $tmp; とし
$sheetData[0] に $tmp[0]~ を保存します。
そして、また次の行ごとに列の配列を作成します。
$tmp[0] = 'こんばんは'
・・・・・・
と作成した後、
$sheetData[1] に $tmp[0]~ を保存します。
やっとこれで、セルのプロパティの配列とセルの値の配列が1:1に対応するようになりました。

プロパティと値の配列の内容を見る

今回の配列の並びは分かりにくいですね。
配列の中身を確認してみましょう。
配列の内容を見る PHP 関数は print_r(配列名)
print_r は指定した変数に関する情報を解りやすく出力してくれます。
print_r 関数がいくら見やすく改行や半角スペースを入れてるといっても、 ブラウザに表示させちゃったら全部一列・・・では、やっぱり見にくいので <pre>タグを使って表示させます。
<pre>~</pre>は~内のコードを上記の規則を無視してそのまんま表示します。
改行や半角スペースが連続していてもそれもちゃんと表示してくれます。
ソースコードを表示する際に用いられる事が多いタグです。
例として、背景色の配列 $cellst を表示するときは
echo "背景色 $ cellst=<pre>";
print_r($cellst);
echo "</pre>";
となります。

for 文をまわして各セルの値とプロパティ取得

ここまで、各セルの値とプロパティ取得方法について説明してきました。
次ぎに、for 文をまわして各セル ($i,$j) の値とプロパティ取得します。
前項エクセル表示テストファイル作成で、 行の最大値取得 $maxrow、列の最大値取得 $max_column を取得しました。
よって、
$i = 1~ $maxrow
(A 列は 1 なので 1 から始めます)
$j = 0~$max_column
とし、for 文をまわして各セルのプロパティと値を取得します。
取得の方法は前項で説明済みですが、ボイントは行列の指定方法です。
プロパティ取得メソッド
getStyleByColumnAndRow($j,$i)
及びセル値の取得メソッド
getCellByColumnAndRow($j,$i) の行列指定は Column And Row ですから
Column 列の $j を先に
Row 行の $i を後にして
( )内を指定します。

おまけ行飛ばし

2行目から指定行を飛ばせるように細工をします。
おまけの機能なのですがあると便利です。
if($i == 1){
  $i = $i + $toba;
}
なお、$toba はファイルの最初の方で設定した値です。


ここまででセル内の背景色、文字色、文字太さの書式と値を取得できました。
このあとセル内の文字を書式に従って表示していきます。

長くなりましたのでここで一旦切りたいと思います。


エクセル表示ル作テストファイ作成3 に続く
エクセル表示ル作テストファイ作成 に戻る
単純な PHPExcel リ-ダファイル動作確認 に戻る

63PearVillageに戻る