いまだにでてくる文字コードがらみの問題のための
2015/01/18
前回の記事の検証
実際に、org.apache.poi.ss.usermodel.DateUtilを使ってみる。
エクセルで使われるシリアル値の計算についてです。
と、実は、自前で計算しようとすると、とても面倒な気が....
これ素直に、ライブラリまかせのほういいと思う。
「下手に手出すと帰ってこれない」いつものパターン
public void setCellValue(Calendar value) { setCellValue( HSSFDateUtil.getExcelDate(value, _book.getWorkbook().isUsing1904DateWindowing()) ); }
public void setCellValue(Date value) { setCellValue(HSSFDateUtil.getExcelDate(value, _book.getWorkbook().isUsing1904DateWindowing())); }
Javaです。エクセル操作をおこなうためにpoiを使ってたりします。
時刻形式のフォーマットをエクセルファイルの書式で設定して、poiを使ってシリアル値を渡すための計算を模索してたりします。
できてるっぽいです。
結果
javaです。
excelは列をアルファベットで表現しています。
Aなら1とかZなら26とかです。
POIではcolの位置を、0スタートの数値であらわすので、プログラムにおとすとき僕は混乱してしまいます。
この辺の感覚が違う人は、こういったことを気にしないし、苦にもしないようですが、僕の場合、デザインのときの位置決めと、コード上での指定を一致させたいです。
というわけで、POI を使う場合は、いつもユーティリティーメソッドのposメソッドを用意したりします。
ちなみにエクセルのバージョンによって、16384まで列が使えるようです。
以下コード
poiの操作で使う場合は、-1して使います。
groovyです。
前回からのつづき。
プログラマメモ2: ワークブックからシートを読み込むのよ - groovy
forを使わずやってみた。工夫したつもりだけど。
あとはlogicの中身を実装する感じ。
今回やってて学習したこと、メソッドをクロージャに変換できること。このやり方使えばxxx.yyyが減るから、すっきりするかな。
しかし、はまったのは、比較時に()をつけないと、クロージャーそのままとして比較してしまい、エラーになった。
いろいろためしたけど、この案はぼつにしてforまわし使うんだろうな。
grailsをさわりはじめて、groovyいいなーと最近ふたたび思っているところです。
POIを使って、エクセルのシートを読み込む際に、indexを指定しないととれないのが面倒です。
groovy使うならどういうふうにするかなーというわけで、こんな感じ。
Not enough data (1) to read requested (2) bytesappliを申請してもいっこうに承認される気がしないので、べつのことにチャレンジということで、Javaです。POIです。 excelをPOIで処理をしようとして上記のエラーにでくわしました。やったことは最新のPOIにする現時点では3.8かな。あと読み込むファイルをxlsからxlsxにする。