java POI を使用してのExcel出力で nullPointer Exception、実行失敗。→原因:セルの未定義
目的:java POIを使用してExcelにDBから取ってきた値をセルに埋め込む。
別の人がコントローラとDBクラスを作成してくれていたのでわたしが作成するのはExcel出力クラスのみ。
ボスが実装したコード(以前作成された別機能)を参考にしつつコードを考え書いていく。
テンプレートファイル(事前にExcelで作成しプロジェクト内に配置)は読み込めていて指定したフォルダに自動生成されているのに出力したい値が出ない。。。
指定している行・列はあっているし、値を埋め込まれるかのテストとして値はDBからでなく直接文字列を入れてあるのに。。
・Excelのファイル形式が違う?(Excelは2003と2007の形式でフォーマットが違うためコードも変わる)
→テンプレートのExcelファイルも自動生成するファイル名もすべて2007(XSSF)で統一してあるのでOK
・Excelのテンプレート内のセルの書式設定がおかしい?
→標準に指定してあり、文字列に変換すると値は入るが他のPOI出力(別機能)ではセルの書式設定が標準でも問題なく値が出力されているので、文字列である必要はない。のでOK
よーし割と論理的に考えられている。OKOK成長してるぞ一応、この調子。。。
だがこれはお勉強中ではなく業務中!!時間がやばいというか遅々として進んでいなさすぎ!ということでボス召喚。
が、さすがボス、検索力が違う。さっとデバッグしてgetCell()に値が渡ってきてないことを発見しネットで必要な情報を見つけました。
そんなもんもうひとつのExcel出力がうまくいってるほうの機能のプログラムでいっこもやってないやん?
「あ~なんかあったなこれ。」ボスは何度かこのバグに遭遇した覚えがあったとのこと。
つまり、Excelの未結合のセルを、行と列を指定してもgetCell()はどのセルに出力すればいいのか分からないようです。
別機能のExcel出力のテンプレートではセルがすべて結合されており、そのためうまくgetCell()がセルの場所を認識し出力を行なえているとのことでした。
作成中で詰まっていたほうではセルが結合されておらずJavaはどのセルにゲットした値を出力すればいいのか分からなかったのでエラーになってしまっていたのでした。と言うことで、getCell()メソッドの中にIf文を入れ、
「もしセルの場所が不明(null)のとき、createCell(場所、行&列番号(getCell()のパラメータで指定)で出力するセルを指定(つくる))」
もしかしたら私生活にも結構活かせるかもしれない。
それにしてもボスによる目の前で繰り広げられるショートカットキーとブラインドタッチと知識のパフォーマンスがすごすぎる(つまり無駄がなく早い)。
15年以上経験を積んでるボスのスキルとまだプログラミング歴半年にも満たない私を比べるのはおかしいけど、
プログラミングは無料でオンラインでいくらでも勉強できるから、勉強不足を感じた時ものすごい情けなくなる。
英語の勉強にもなるのでもっとやろうと思うけどいつのまにかプログラミングをしてたはずなのに英語のほうが楽しくて英語の勉強に移行してしまう 笑