質問するログイン新規登録
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

7618閲覧

phpSpreadsheetによる背景装飾方法について

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/08/28 05:03

編集2019/09/04 05:51

0

0

phpSpreadsheet を使ってEXCELファイルに出力するところまで、ようやく辿り着きました。

try { // DB接続時にfetchモードを指定 $pdo = new PDO($dsn, $user, $password, [PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]); foreach ($pdo->query("SELECT ===( 中 略 )=== GROUP_CONCAT(process_code separator ',') as wkbn FROM process_plan GROUP BY desired_date, product_num, direction_num, branch_num ORDER BY customer_code ") as $row) { $tmp = []; $sav = []; foreach ($row as $key=>$value) { if ($key === 'wkbn') { $sav = str_getcsv($value); } else { $tmp[] = $value; } } foreach ($sav as $val) { if ($val !== '') { $tmp[] = $val; } } $data[] = $tmp; } } $sheet->fromArray($data, $exception_value, 'A2');

出力されるワークシートの装飾を自動化できれば完成となります。

  • 「$sav?」「$val?」の値が”MA”の時は->setARGB「黄色 argb(FFFFFF00)」
  • 「$sav?」「$val?」の値が”GV”の時は->setARGB「青 argb(FF0000FF)」
  • 「$sav?」「$val?」の値が”ZZ”の時は->setARGB「赤 argb(FFFF0000)」

上記の条件のように、ワークシート全体から特定の文字列を検索し、該当セルの背景色を指定色に変更するループ?を作るにはどうやったらいいでしょうか。

上記コードでいうところの
30行目 $tmp[] = $value;
37行目 $data[] = $tmp;
のあたりに当該セルの背景色を$value(もしくは$tmp)、あるいは、$tmp[] (もしくは$data[])の値が”MA”のときは”背景を黄色”という具合に設定できるのでしょうか。※設定できるのかできないのかすらわかりません。

もしくは・・・

$sheet->fromArray($data, $exception_value, 'A2');
この部分のオプション的コード(パラメータ?)を指定する感じでコードを組めば背景色を指定できるのでしょうか。

$tmp[]?を使用しているのは、MySQLでは「配列関数」が使用できないため、$val個ある列を$data[]に結合するためのものですが、背景色を指定したいのは主に$tmp[$val]の入れ子?の値にのみとなります

現状私の知り得る知識で言いますと、下記の参考URLにある『背景色の指定方法』しか知ることができませんでした。

【PhpSpreadsheetでExcelを操作する全26実例!:背景色を指定する】
https://blog.capilano-fw.com/?p=3945#i-17

【Symfoware:セルの色】
https://symfoware.blog.fc2.com/blog-entry-2059.html

2つのやり方だと、既にセルに代入されている状態のところの背景色を指定しているため、当方がしようとしている$row行:$val列目の背景色を指定する方法自体も理解できていません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/28 05:11

後から検索するのではなくシートに値なり何なり突っ込んで fromArray()に入れるdata作っているときに設定するのでは駄目でしょうか? ドキュメント読んだ感じ、Grepに準ずる機能はなさそうに思います。
退会済みユーザー

退会済みユーザー

2019/09/04 05:38

お返事遅くなりました。 すみません、教えていただいた方法を実践したいのですが、どうやったらよいかわかりませんでした。 お返事の内容の部分で、出力するファイルを全文検索(Grep?)で検索し、『該当キーワードに対して一致するものの背景色を指定する』というものではなく、出力前に『$sheetに追記?する時に背景色を指定したい』といったものにしたいのです。 投稿した際のコードでいうところの 30行目 $tmp[] = $value; 37行目 $data[] = $tmp; のあたりに当該セルの背景色を$value(もしくは$tmp)、あるいは、$tmp[] (もしくは$data[])の値が”MA”のときは”背景を黄色”という具合に設定できるのでしょうか。 もしくは・・・ $sheet->fromArray($data, $exception_value, 'A2'); この部分のオプション的コード(パラメータ?)を指定する感じでコードを組めば背景色を指定できるのでしょうか。 $tmp[]?を使用しているのは、MySQLでは「配列関数」が使用できないため、$val個ある列を$data[]に結合するためのものですが、背景色を指定したいのは主に$tmp[$val]の入れ子?の値にのみとなります
m.ts10806

2019/09/04 05:42

質問本文に追記いただければと。
退会済みユーザー

退会済みユーザー

2019/09/04 05:47

現状私の知り得る知識で言いますと、下記の参考URLにある『背景色の指定方法』しか知ることができませんでした。 【PhpSpreadsheetでExcelを操作する全26実例!:背景色を指定する】 https://blog.capilano-fw.com/?p=3945#i-17 【Symfoware:セルの色】 https://symfoware.blog.fc2.com/blog-entry-2059.html 2つのやり方だと、既にセルに代入されている状態のところの背景色を指定しているため、当方がしようとしている$row行:$val列目の背景色を指定する方法自体も理解できていません。
guest

回答1

0

ベストアンサー

どうしてもループさせたい話でなければ、、、。

プログラム上、「列数」も「行数」も取得したデータ次第のようなので、条件に一致するセルを自分で探してスタイル設定するよりも、
対象セルに対して一括で条件付き書式を設定する方が楽なのではないかと思いました。

対象セルの範囲を考えるのが面倒だったら、全セル対象(A1:XFD1048576)でも有りかも??
(どんなExcelファイルが作りたいのか不明なので、ここは仕様に沿ってご判断を)

で。
もし、全セル対象(A1:XFD1048576)に条件付き書式を付ける、ということが可能ならば、

phpspreadsheetの「条件付き書式」は、リンク先見てもらえれば分かりますが、設定を作ること自体がそこそこめんどくさいので^^;

テンプレートを用意して、予め「条件付き書式」を設定しておいて、php側では背景色変更の処理を省く方法が一番簡単かなと思います。

ご参考までに。。。

投稿2019/08/29 08:48

mix-peach

総合スコア1910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/04 07:39

回答ありがとうございます。 お恥ずかしい話、今回初めて「条件付き書式」という機能を知りました。 現状もしかしたら、この方法が一番カンタンに組み込めそうと思いました。 ただし、現時点で把握している問題点として「条件付き書式」を指定してしまうと、出力したファイルを編集して『別の色』にしたい時には不便となってしまうので協議中です。 でも、とてもいいアドバイスありがとうございます。
退会済みユーザー

退会済みユーザー

2019/09/05 05:25

最終的な結論は「同じ文字列の値をイコールで条件付き書式で指定してしまうと”同じ文字列でも「人間的主観」で色が変更になる”場合がある」ため、任意で変更できる状態(何も指定しない状態)で使用することとなりました。 たくさんの方にご協力を仰いだあげく、不要になりましたという結果に、大変申し訳ありませんでした。
mix-peach

2019/09/05 06:41

システム作りで、仕様変更はよくあることなので、謝らなくても大丈夫ですよ~。 ただ、ベストに選んでいただいておきながら恐縮なのですが、「自己解決」の方が良いかも?です。(この回答では解決していない、ということになるので^^; どうされるかはお任せいたします) 条件付き書式等は、機会がある時にでもお試しいただければ、と^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問