メータープロジェクト

Meters_reports


 先日 poi を使って仕上げたもの。公開できるサーバーもないし、動画を載せるのもなんだか面倒になったので、一応の記録として画像だけ。

 日付の期間を選択するのは、アマゾンアソシエイトのをまね(レイアウトだけだが)。あとはデータの選択方法と、出力方法( CSV、EXCEL 行方向・列方向)を選んでリポートボタンで出力。

 左サイドバーのメニューと文字が違っている。「レポート」と「リポート」。あとで統一。

 基本的に scaffold で作ってから不足する分を追加して、CSS はアジャイル本のをそのまま(一部追加)使ってみた。

 このところさぼっているので、なにかまた取り組まないと。

| | コメント (0) | トラックバック (0)

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)

| | コメント (1) | トラックバック (0)

rjb+poi (2)

 とりあえず rjb + POI でエクセルファイルを出力するようにはできた。まだコントローラ内での処理なのだけれど、クラスを作ったほうがよさそうならば、それも試みてみようかと。流れの確認と思っていたので。

 文字化けは各種ファイルの文字コードが UTF-8 に統一されていないものがあったり( .po ファイルとか)、gettext をきちんとしていなかったあたりが影響していたのかなというところ。今はまったく問題ない。

 詳細はまた明日にでも。


≪ rjb+poi (1) |  rjb+poi (3)≫

| | コメント (0) | トラックバック (0)

rjb+poi (1)

 rjbdemo をなぞるようにして、ひとまず書いてみた。xls ファイルを作ってはくれるのだが、どうも文字化けを直す手立てが見えてこない。

 整理してみると、

book = HSSFWorkbook.new

sheet = book.createSheet
book.setSheetName(0, "抽出データ", HSSFWorkbook.ENCODING_UTF_16)

 シートの名前はこのまま通る。ただ、データベースから読み取ったデータを処理すると駄目。

meters.each do |m|

 row.createCell(0).setEncoding(HSSFCell.ENCODING_UTF_16)
 row.createCell(0).setCellValue(m.name)
end

 のようにしても m.name は化けてしまう。m.name の代わりに直接文字を "名前" のようにいれてみても駄目だったりしたし。謎。(まあ、なにかが間違っているのだろうけれど)

 もう少し処理の流れを考えながら試行しますか。

 保存では render :text と send_data の両方を試してみた。とりあえずはどちらでも(ややダイアログは違うものの)保存できている。


≪ すごいよ! |  rjb+poi(2)≫

| | コメント (2) | トラックバック (0)

すごいよ!

 ルーティングエラーの原因はなぜかわからないがビューのリンクが違っていることのようだ。ビューを見ていたらなんだか「変だな」とは思っていたので修正したら動作した。試してみようという人は次のように修正のこと。

<a href="graph"><%= _('View Graph')%></a> | <a href="populationbook"><%= _('Download Workbook')%></a>

 table.rhtml の例だけれど、上の a タグ部分を link_to を使った Rails の記法に修正する。

<%= link_to _('View Graph'), :action => 'graph' &> | <%= link_to _('Download Workbook'), :action => 'populationbook' %>

 同じようにして、graph.rhtml も修正する。

 これでなんとも感動的な場面にあなたは遭遇する。(ってまあ、わたしがですが)

Rjbdemo
( Virtual PC で WEBrick を動かして、バイオノートでアクセスしてみた。)

 「エクセル表形式」を選択すると xls 形式のファイルをどうする? と尋ねてくるので、保存を選べばデスクトップ(というか指定の場所)に保存されるし、開くを選ぶとブラウザに開かれて、そのまま操作ができるようだ。メニューから保存を選んだら xls ファイルとして保存された。ただ、無駄があるのか巨大な二倍強のファイルサイズになっていたけれど。

 恐るべし、 Rjb + POI 。あとは実際どう処理させるべきかってあたりを学ばなくては。

rjb+poi (1)≫

| | コメント (2) | トラックバック (0)