はじめに
これは、いえらぶアドベントカレンダー用に投稿したものです。
- 文系エンジニア
- 入社1年目
とかいうプログラミング初心者が、特に下半期によくやったPHPExcelを使う案件で困ったことと見出した解決方法について書きます。
ググってもなかなか出てこなかった内容なので、同じ課題を抱えている人の参考になれば幸いですし、もしここ間違ってるよ、こうやったほうがいいよ、というものがあればコメントをいただけますと、めちゃくちゃ喜びます。
案件の経緯
あるとき、とあるクラウドサービスがありました。
そのサービスには、契約書をExcelで出力できる機能がありました。
出力した契約書には、契約内容が自動で入力されていました。
あら、なんて便利なんでしょう。
しかし、クライアントは言いました。
「もっと使えるようにしてほしい」
※もちろん、盛ったうえでの意訳です。
本題
要望が多岐にわたっていたので、いろいろやったんですが、
そのなかでもセルの加工に悩まされました。
例えば、「このセルの色を変えたい!」となったとき、
「PHPExcel 色 変更」とかで調べます。
そこででてきたコードがこちら
$sheet->getStyle( 'A1' )->getFill()->setFillType( PHPExcel_Style_Fill::FILL_SOLID )->getStartColor()->setARGB( 'FFFFCCCC');
参考:https://elearn.jp/phpexcel/cell/setfilltype.html
ふむふむ、なるほど。
なんかシートを取得して、文字列でセルを指定して加工するんだね。
おっしゃ!!!やったろ!!!!
そして、確認した既存のソースコードがこちら。
// シートから行を取得してループ
foreach ($sheet->getRowIterator() as $row) {
// 行からセルを取得してループ
foreach ($row->getCellIterator() as $cell) {
// 取得したセルを加工する関数へジャンプ!
$this->editCell($cell);
}
}
/* ※関数名やコメントアウトは変えてます。 */
・・・。
シートのまま加工するんじゃないんか!!!
さっきググったやつと違う!!!!
文字列でセルの指定なんかできなくないか!?!?
というわけで、他のサイトも探してみました。
しかし、探しても探しても$sheet->
からそのまま加工するやり方ばかり、、、
$cell->
から始まる加工方法が全然でてきません。
結論
いろいろ検索して、試してみて、トライアンドエラーを繰り返していたので、結論に至った経緯をはっきり覚えているわけではありませんが、、、
var_dump
を加工した社内の独自関数を使って、objectの中をみたり
トライアンドエラーのなかでも、「目的は果たせなかったけどここは使える気がする」みたいな学びをしつつ、少しづつPHPExcelの理解を深めました。
そして出た結論。
PHPExcel_Cell
の中にあるメソッドで使えそうなものを探せばセルごとに加工できる。
よく考えれば、インスタンス化したクラス(オブジェクト)の中にあるメソッドを->で使えるよ
っていう基本のところを理解したうえで、
ライブラリの深部までじっくり読む
っていうことをすればどうってことなかったんですね。
自分はまだ初心者だし、そんなところ見ても分からないっていう先入観から、避けてしまっていました。
ビビらずにやってみるというのができていればもっと早く解決できたかもしれません。
まあ、やりたかったことの中には、そこまでわかってもやり方が分からず、先輩にパスしてしまったものもあるんですが、、、
さいごに
最初は、きちんとcellごとに加工する方法まで書こうと思っていたのに、あんまり会社のソースコード公開するのもどうなんだろ~と思っていたら一般論みたいな結論になっていました。
釣りみたいなタイトルですみません。
釣ろうと思ったわけではないです。
そんな感じで、私は社内でPHPExcelに詳しい人トップ8くらいには入れたのではないかと思います。(大きくでたのか小さくでたのかわからない)
これからも、このライブラリの使い方わかんね~~~~!!!!!ってなったときは、Google先生に頼りつつも自分でどうにかするようにしたいですね。