rjb+poi (3)
arton さんのおかげでクライアント側にエクセルデータを渡すことができるようになった。ありがとうございます。
Virtual PC での待ち時間にちょっとつらくなってきたので、リアルデスクトップにも JDK をいれて残りの部分を POI を使う形に修正。ただ、ウィルスバスターに盛んに「いいのか? 大丈夫なのか?」と念を押されたのはちょっと疲れた。ま、それは仕方ない。(こういうときは「しょうがない」というべきか)
今のところはコントローラーに置いてあるけれど、クラスにしたほうがいいのだろうか。確かにそのほうがすっきりはするのだろうな、とも思う(それだけってわけではないでしょうけれど)。
ざっとこんな感じ。
book = HSSFWorkbook.newsheet = book.createSheet
book.setSheetName(0, _('Pick Up Data'), HSSFWorkbook.ENCODING_UTF_16)
row = sheet.createRow(0)
CONTS.each_with_index do |c, i|
sheet.setColumnWidth(i, 256 * c[1])
set_string(row, i, c[0])
end
rowc = 2
units.each do |u|
meters = Meter.find( ... ここは省略
meters.each do |m|
col = 0
row = sheet.createRow(rowc)
row.createCell(col).setCellValue( m.created_on.strftime("%Y/%m/%d") )
row.createCell(col + 1).setCellValue(m.used_figure)
set_string(row, col + 2, m.unit.category)
set_string(row, col + 3, m.unit.unit_number)
set_string(row, col + 4, m.unit.place.name)
rowc += 1
end
rowc += 2
end
bout = ByteArrayOutputStream.new
book.write(bout)
send_data bout.toByteArray, :type => 'application/vnd.ms-excel', :filename => XLS_FILE_NAME
render :text ではない正しい作法が、これでいいかどうかは不明なものの、どちらかというとよいのではないかなと考えているところ。
日付のフォーマットについて、CellStyle の DataFormat を調べてみたものの、yy/m/d という順序で並べるのはやはり日本的なせいか対応していないようなので、標準のまま。ALIGN_RIGHT も試してみたものの、まだうまくいかないので、もう少しドキュメントをよく読んでというあたり。
いずれにしても、友人の想定していたデータのやりとりが実現できたというところでめでたしめでたし。(とはいえ、採用するかどうかは本人しだいなので、わたしの自己満足を充足させたという程度のことでしかないのだけれど)
| 固定リンク
コメント
そうそう、send_dataです。
投稿: arton | 2007.07.04 22:08