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

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください