From: "H.Shimura" Date: 2004-08-26T15:57:31+09:00 Subject: [ruby-list:39979] Excel から読んだ値の種類の判定 Re: [ruby-list:39977] Re: 初心者向けの意見交換の場は?簡単な質問はどこにすればよいでしょうか。 Hisashi Yahata様 志村 そろそろ表題と内容が合わなくなってきたので表題を変更しました win32ole経由で、エクセルから範囲を読み込む時の話 Excel(VBA)の Rangeオブジェクトの Valueプロパティは、 範囲内のセルの数が一つなら一つの値を、複数の時は2重配列を返すようですね。 [[, , ...], [, , ...], ... ] 其々の値は、Excelがそのセルの値をどう思ってるかによって、 適切なクラスのオブジェクトとして受け渡されるようです。 (数値、文字列、nil しか試していませんがその3種はそうでした) さて、ruby に戻って、オブジェクトの種類を見るには、 is_a? や kind_of?(<所要のクラス>)メソッドを使う方法があります。 nil かどうかだけなら、単なる真偽の検査でも分かります。nil -> 偽 d = data(excelfilename,waku,sheet) d.each do |row| row.each do |cell| if cell.kind_of?(String) then # いろいろ elsif cell.kind_of?(Numeric) then # イロイロ elsif cell.kind_of?(NilClass) then # 雑多 end end end In message "[ruby-list:39977] Re: 初心者向けの意見交換の場は?簡単な質問はどこにすればよいでしょう か。", , Hisashi Yahata wrote... >>> 例えば、質問例は、エクセルデータを読み込み、その内容が「数値」か「文字」 >か >>> [nil」かを判定する方法です。数値であれば計算し、文字の場合にはその文字を >使う >>> ためですが、簡単なスクリプトがあると思うのですが、簡単にみつかりません。 >## Excelのデータを読み込む > a = sheet.Range(waku).Value   # get the contents > excelfilename="cal.xls" > waku="A1:F26" > sheet=1 > d = data(excelfilename,waku,sheet) ># p d >for i in 0..25 > for j in 0..5 > print d[i][j],"\t" > end >print "\n" ---------------------------------------+---------+---------+以上 2004/8/26 志村弘之 mailto: shimurahiroyuki@obun.co.jp