« rjb+poi (2) | トップページ | 今度は記事一覧スクリプトでハマる »

rjb+poi (3)

 arton さんのおかげでクライアント側にエクセルデータを渡すことができるようになった。ありがとうございます。

 Virtual PC での待ち時間にちょっとつらくなってきたので、リアルデスクトップにも JDK をいれて残りの部分を POI を使う形に修正。ただ、ウィルスバスターに盛んに「いいのか? 大丈夫なのか?」と念を押されたのはちょっと疲れた。ま、それは仕方ない。(こういうときは「しょうがない」というべきか)

 今のところはコントローラーに置いてあるけれど、クラスにしたほうがいいのだろうか。確かにそのほうがすっきりはするのだろうな、とも思う(それだけってわけではないでしょうけれど)。

 ざっとこんな感じ。

book = HSSFWorkbook.new

sheet = 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 も試してみたものの、まだうまくいかないので、もう少しドキュメントをよく読んでというあたり。

 いずれにしても、友人の想定していたデータのやりとりが実現できたというところでめでたしめでたし。(とはいえ、採用するかどうかは本人しだいなので、わたしの自己満足を充足させたという程度のことでしかないのだけれど)


≪ rjb+poi(2)

|

« rjb+poi (2) | トップページ | 今度は記事一覧スクリプトでハマる »

コメント

そうそう、send_dataです。

投稿: arton | 2007.07.04 22:08

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: rjb+poi (3):

« rjb+poi (2) | トップページ | 今度は記事一覧スクリプトでハマる »