• 締切済み

RubyによるExcelファイル出力

お世話になります。現在、以下のプログラムにて、指定対象のセル範囲を画面出力しております。また、画面出力以外で、プログラム対象となったファイル名がExcelにて出力されるようにしておりますが、 "puts sheet.Range('C15:C50').value" にて表示している内容を出力エクセルにも記載したいと考えているのですが、うまい方法はないでしょうか。 ご教示頂ければ幸いです。 # excel_data_gets.rb t = Time.new create_inf = t.strftime("%Y%m%d%H%M") log_a = ".xls" out_log = ("#{log_a}#{log_d}") chk_value_log = File.open(out_log,"w") # require 'win32ole' def getAbsolutePath file fso = WIN32OLE.new('Scripting.FileSystemObject') fso.GetAbsolutePathName(file) end def getFuncData file file = getAbsolutePath(file) $excel.visible = FALSE book = $excel.Workbooks.Open(file) sheet = book.Worksheets(1) puts sheet.Range('C15:C50').value book.Close end $excel = WIN32OLE.new('excel.Application') ARGV.each{|file| if file.length > 0 chk_value_log.print file.sub(/\.xls/,"") + "\n" # -> ワイルドカード展開用 chk_value_log.print getFuncData(file) end } $excel.Quit chk_value_log.close

みんなの回答

  • ken-etsu
  • ベストアンサー率46% (55/119)
回答No.1

質問の意味がいまひとつ不明ですが、要するに、putsで出力している内容を、別のExcelファイルに記録したい、ってことですか? だったら、出力用ExcelファイルをOpenしておいて、putsしているRangeに対してCopyメソッドを使って、出力用Excelファイルの好きな範囲(Range)に直接コピーするのが早いんじゃないでしょうか? 詳しくは、Microsoft Excelのヘルプを参照してください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • RUBYの出力をエクセルに入力させる方法

    http://jp.rubyist.net/magazine/?0004-Win32OLE このリンクを教えていただきましたが、わかりません。 具体的な目的を提示します、具体的な方法と必要ならばその 情報もとも教えていただけるとうれしいです。 a=3 + 4 b=5 + 2 puts a puts b この puts a と puts b を エクセルの A1 と A2 に出力させる具体的な方法を 教えてください。

    • ベストアンサー
    • Ruby
  • 【ruby】特異クラスを使って,File.statをカスタムしたい

    File.statに、nameというメソッドを追加したいです。 st=File.stat('hoge.txt') puts st.name #=> hoge.txt 上記のように使いたいのです。 そこで、以下の様に書いてみました。(行頭のスペースは全角です) class File  class << self   def stat(file)    st=File::Stat.new(file)    class << st     def name      @file     end    end    st   end end end st=File.stat('./hoge.txt') puts st.name #=> nil 上記実行結果はnilが出力され、期待した結果は得られませんでした。 上記の様に書いた理由を以下に記します。 クラスメソッドstatは、file.rbのclass Fileの中に定義されていて、 stat.rbのFile::Stat.new(file)を戻り値としていました。 stat.rbのclass File::Statのinitializeでは、 def initialize(file)  @file = file  (略) end となっていたので、上記の様に書いてみたのですが、何が悪いのでしょうか? ご指導のほど、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • エクセルマクロ(vba)のFSO.OpenTextFileを利用したファイルへの追記について

    FSOを利用して、特定のファイルがなければ、FSO.CreateTextFileを使ってファイルを作成して、ログを記入します。 特定のファイルがあれば、FSO.OpenTextFileを使って追記します。 ファイルが存在しないので新規でファイル作成を行ってからログを記入するのははうまくいくのですが、ファイルが存在するので、ファイルを開いて追記する場合ががうまくできません。 何が原因なのでしょうか? 以下がそのプログラムです。 アドバイスをよろしくお願いします。 Dim excel_folder excel_folder = ThisWorkbook.Path excel_folder = excel_folder & "\log.txt" Set objShell = CreateObject("Wscript.Shell") Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") Dim stream, data_text If FSO.fileexists(excel_folder) Then Set stream = FSO.OpenTextFile(Filename:=excel_folder, IOMode:=ForAppending, Create:=True) Else: Set stream = FSO.CreateTextFile(Filename:=excel_folder, Overwrite:=True) End If data_text = "test" stream.writeLine (data_text) stream.writeLine (vbCrLf) stream.Close

  • RubyProgramによるExcel処理

    お世話になります。 Rubyに関して詳しい方がいらっしゃれば、ご教示頂きたく思います。 Excelの対象セルの値が一致した場合に、そのセルの値をコピーし、 指定のExcelファイルの任意のセルにペーストしたいと考えております。 環境:WindowsXP、ruby-1.8.4-i386-cygwin ・対象Excel 列1    列2 ああああ  1 いいいい  2 うううう  3 -> "ああああ"が一致した場合に値"1"を、以下、作成されるExcelの   任意のセルにコピーする。 ・作成Excelイメージ t = Time.new create_inf = t.strftime("%Y%m%d%H%M") log_a = "chk_file_log" log_b = "(" log_c = ")" log_d = ".xls" out_log = ("#{log_a}#{log_b}#{create_inf}#{log_c}#{log_d}") chk_value_log = File.open(out_log,"w") chk_value_log.print "test\n" chk_value_log.close Rubyにて、対象セル指定とかって可能なのでしょうか。 可能であれば、追加ツールのインストールなしで、プログラムで処理したいと考えております。 よろしくお願いいたします。

  • Ruby の 文法に困ってます。

    以下のようなソースの場合、to_sメソッドは何時呼ばれているのでしょうか。またどういう意味を成しているのでしょうか。 Ruby初心者のためご教授頂けないでしょうか。 よろしくお願いします。 class Vector   attr_accessor :x, :y   def initialize(x=0, y=0)     @x = x     @y = y   end   def length     Math::sqrt(@x ** 2 + @y ** 2)   end   def to_s      "(#{@x},#{@y})"   end   def <=> other     length <=> other.length   end end arr =[] arr << Vector.new(2,2) arr << Vector.new(3,2) arr << Vector.new arr.sort.each do |item|   puts item end 結果は以下になります。 (0,0) (2,2) (3,2)

    • ベストアンサー
    • Ruby
  • Ruby について質問です

    Rubyについて質問です class Document include Enumerable attr_accessor :title, :author, :content def initialize(title, author, content) @title = title @author = author @content = content end def words @content.split end def each words.each { |word| yield(word) } end end doc = Document.new('Advice', 'Harry', 'Go ahead make my day') doc.each { |word| puts word } このようなコードがすでに出来上がったおり、 これをアルファベットの早い順に並び変えて(sort)出力させるには どのようにコードを追加すればよいですか? どうやら、sort メソッドと <=> 演算子を使って記述するようですが、 よくわかりません 回答お願いいたします。

  • rubyで変数から指定したバイト読むには?

    たとえば、 Class Hoge initialize(arg)  @data=arg end def read(size)  @dataからsize分読んで返す。 end end みたいなクラスを hoge=Hoge.new(aaa) puts hoge.read(1024) puts hoge.read(1024) みたいに使いたいです。 指定したバイト分読むってどうするんですか? ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • EXCELのファイルを別ファイルに保存する

    activeperlを使って、サーバ上のexcelファイルを名前を変更して、 別ファイルに保存したいですが、いい方法はありますでしょうか? 今作成したcgiのソースは下記です。 use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; my $excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit') || die "Excelが起動できません。"; my $book = $excel->Workbooks->Open('c:\Inetpub\excel\temp.xls') || die; my $sheet = $book->Worksheets('temp') || die; $book->SaveAs('C:\Inetpub\\excel\dest.xls'); $book->Close(); よろしくお願いします。

    • ベストアンサー
    • CGI
  • EXCEL VBAについて(再質問)

    お世話になります。 EXCEL VBAで指定したフォルダのEXCELブックが1つでもオープンされているかどうか知りたいのですが、可能でしょうか。 という質問を行い、以下の回答をいただきました。 自分でテストしてみてできたと思ったのですが、 他の人が開いているのが分かりませんでした。 他の人がオープンしているかどうか知ることは可能でしょうか? よろしくお願いします。 以下の回答といただきました。 ------------- ※[ツール]-[参照設定]で Microsoft Scripting Runtimeにチェック入れて下さい。 Dim Fso As New FileSystemObject 'ファイルシステムオブジェクト Dim xlBook As Workbook '開かれているブック Dim objFolder As Folder '調べるフォルダ Dim bOpenedBook As Boolean '開かれているかフラグ '調べるフォルダを「C:\tmp」とする。 Set objFolder = Fso.GetFolder("C:\tmp") bOpenedBook = False '今開かれているブックでループする。 For Each xlBook In Excel.Workbooks If Len(xlBook.Path) > 0 Then 'ブックが保存されているフォルダと調べるフォルダが一致するか? If objFolder Is Fso.GetFolder(xlBook.Path) Then '一致すれば開かれている bOpenedBook = True Exit For End If End If Next '結果をメッセージボックスで表示 If bOpenedBook Then MsgBox "開かれています。" Else MsgBox "一つも開かれていません。" End If

  • RubyによるCSVファイルの該当行の取り出し

    お世話になります、 Rubyプログラムにて以下のようにCSVファイルをコピー&ペーストしておりますが、 出力結果の1-4行目までの数値は必要ないため、5行目より処理をしたいのです。 良い方法があればご教示いただけないでしょうか。 ・RubyProgram <snip> p1 = ARGV[0] # p1:出力ログ対象CSV file_csv = File.open(p1,"r") while csv_word = file_csv.gets do chk_value_log.print csv_word p csv_word end file_csv.close chk_value_log.close <snip> ・出力結果 $ ruby -v aaaaa.rb bbbb.csv ruby 1.8.4 (2005-12-24) [i386-cygwin] "# name, id, name, IP address,,,,,,,,,,,,,,,,,,,,\r\n" "# name, id, name, IP address,,,,,,,,,,,,,,,,,,,,\r\n" "# name, id, name, IP address,,,,,,,,,,,,,,,,,,,,\r\n" "# name, id, name, IP address,,,,,,,,,,,,,,,,,,,,\r\n" "1,3,1101,0,32,19,1152,1,4,0,0,0,0,0,0,0,0,1152,1101,51,0,0,0,0\r\n" "1,4,254,0,7,3,264,1,3,0,0,0,0,0,0,0,0,264,254,10,0,0,0,0\r\n" "1,1,-1,0,25,66,-1,0,0,0,0,0,0,0,0,0,0,0,0,-1,70,2945,8153\r\n"