[#46732] ヒアドキュメント内の変数展開が正常に行われない — ShingoKintaka <kamuycikap@...>

Ruby  :1.8.7 (Ubuntu9.10)

12 messages 2010/01/05
[#46733] Re: ヒアドキュメント内の変数展開が正常に行われない — rubikitch@... 2010/01/06

From: ShingoKintaka <kamuycikap@tulip.ocn.ne.jp>

[#46800] DLモジュールの使い方 — kouichi_someya@...

染谷と申します。

12 messages 2010/01/20
[#47678] プログラム実行時に「[BUG] Segmentation fault」 — 染谷 康一 <kouichi_someya@...> 2010/12/09

染谷と申します。

[ruby-list:46731] Re: [ANN] win32oleを活用したExcel操縦用ライブラリ exlap.rb

From: m y <soz0345hooky@...>
Date: 2010-01-05 14:55:07 UTC
List: ruby-list #46731
やなぎさわと申します。

初めてMLに投稿させていただきます。
自分もwin32oleを使ったexcel操作用スクリプトをいくらか書いていたのですが、
exlap.rbを使ってみようと思い、いままでのものを書き直してみました。
そこで、うまく動かない場合があったのでアドバイスをいただければと思い
メールさせて頂きました。

動作環境はWindows XP SP3
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
Excelのバージョンは2003です。

サンプルコードなどを参考にして書いてみたのですが、
csvファイルをいくつも読み込んで、個別にxlsファイルに出力する場合に
1つだけだとうまく行くのですが、複数個処理すると
エラーがでて止まってしまいました。

****test1.csv**** ここから
"青森",1437000,149.5,89
"岩手",1385000,90.7,91.5
"宮城",2360000,324,94.4
************** ここまで

****test2.csv**** ここから
"秋田",1146000,98.6,88.9
"山形",1216000,130.4,92.3
"福島",2091000,151.7,94.4
************** ここまで

処理するスクリプト

****demo.rb**** ここから
#! ruby -KS

require "exlap"
require "lightcsv"

def read_csv(f_n)
data=Array.new
LightCsv.foreach(f_n) do |row|
data << row
end
return data
end

def print_xls(f_n ,data)
of_n = f_n.split(".").first + ".xls"
Exlap.new(of_n) {|wb|
ss = wb.first_empty_sheet
y=0
data.each {|row|
max = row.size
y = y + 1
for x in 1..max
ss[y,x] = row.shift
end
}
wb.save
}
end

Dir.glob("*.csv") do |f|
data = read_csv(f)
print_xls(f,data)
end
************** ここまで

上記のスクリプトを実行すると、
一つ目のtest1.csvはtest1.xlsとして
出力されますが、2つ目のtest2.csvの処理の途中で
Excelが開いたまま保存されず止まってしまいます。

コンソールには
./exlap.rb:502: warning: already initialized constant CONSTANTS
といったwarningが多数出力されたあとに、

./exlap.rb:643:in `display_alert': undefined method `DisplayAlerts' for 
nil:NilClass (NoMethodError)
from ./exlap.rb:333:in `save'
from demo.rb:26:in `print_xls'
from ./exlap.rb:518:in `initialize'
from ./exlap.rb:516:in `each'
from ./exlap.rb:516:in `initialize'
from demo.rb:16:in `new'
from demo.rb:16:in `print_xls'
from demo.rb:32
from demo.rb:30:in `glob'
from demo.rb:30

というエラーメッセージがでて処理が止まりました。
exlap.rbの333行目
da_v = @@app.display_alert(false)
374行目
@@app.display_alert(da_v)
をそれぞれコメントアウトするとエラーが出なくなることが分かりましたが、
"既にファイルがありますが置き換えますか?"という確認ダイアログがでて、
対症療法的な感じなので、もっとスマートな対処方法があれば教えていただきたい
と思いました。

それから502行目の
WIN32OLE.const_load(@obj, ExcelConstant)
のところで出る、大量のwarningを出なくする方法があったら
教えてください。

よろしくお願いします。

(2010/01/04 23:10), YOSHIIZUMI wrote:
>  吉泉です。
>    
>  今年もよろしくお願いします。
>
>  win32oleを活用したExcel操縦用ライブラリ exlap.rb を作りましたので紹
> 介させていただきます。
>
> exlapの紹介サイト: http://cup.sakura.ne.jp/exlap.htm
> ZIPアーカイブ: http://cup.sakura.ne.jp/exlap100.zip
>
>  MS-Windowsに用意されている OLEオートメーションの仕組を利用して、ruby
> 経由でExcelを操縦するために、exlap.rb というライブラリを作りました。
>  私自身が比較的よく用いる制御をメソッド化して、簡単にExcel操縦できる
> ようにしたものです。
>  例えば、変数 ss が1つのワークシートオブジェクトを示している場合、
> ss.range_autofit
> ss.range_allbox
> の2行を書くことで、データが書き込まれている領域のセルの幅と高さを自動
> 調節し、それらセルを罫線で囲みます。
> ary = ss.to_a
> とすれば、ワークシートに書き込まれているデータをaryに2次元配列の形で
> 代入できます。
>  また、「合計」と書かれたセルのある行のところに1行挿入するなら次のと
> おりです。
> ss.findf("合計").EntireRow.Insert
>
>  その他、ワークシートの削除や追加などを行うメソッドがあります。サンプ
> ルスクリプトにはグラフ作成も含めてあります。
>  以上、Excel制御の参考にしていただければ幸いです。
>
>
> �
>
> __________ ESET Smart Security からの情報, ウイルス定義データベースの 
> バージョン 4742 (20100104) __________
>
> このメッセージは ESET Smart Security によって検査済みです。
>
> http://canon-its.jp
>
>
>
>


In This Thread