rubyを使ってExcelの各シートをcsvに保存する

測定データなどがExcelにまとめられているのを、csvファイルに分離するruby scriptです。Windows上で実行します。

下のソースをsplit-each-sheet.rb(例)として保存して、split-each-sheet.rb hoge.xls という風に実行します。私はたいていCygwin上のrubyで実行させています。

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
#

require 'nkf'
require 'win32ole'

def getAbsolutePath filename
  fso = WIN32OLE.new('Scripting.FileSystemObject')
  return fso.GetAbsolutePathName(filename)
end


def read_xls(xls)
  filename = getAbsolutePath(xls)
  xl = WIN32OLE.new('Excel.Application')
  book = xl.Workbooks.Open(filename)
  
  begin 
    book.Worksheets.each{|sheet|
      str = ""

      name = NKF.nkf("-w", sheet.name)
      puts csv_name       = "#{name}.csv"  
      sheet.UsedRange.Rows.each{ |row|
        record = []
        row.Columns.each{ |cell|
            record << cell.Value
        }
        str +=  record.join(",") + "\n"
      }
      open(csv_name, "w"){|f| f.puts str}
    }
    
  ensure
    book.Close
    xl.Quit
  end
end

def main
  ARGV.each{ |xls|
    read_xls(xls)
  }
end

main