9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

いえらぶAdvent Calendar 2019

Day 13

PHPExcelでcellごとに加工する

Last updated at Posted at 2019-12-12

はじめに

これは、いえらぶアドベントカレンダー用に投稿したものです。

  • 文系エンジニア
  • 入社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先生に頼りつつも自分でどうにかするようにしたいですね。

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?