Excelのレコードをインサート文に変換する

rubyExcelファイルの内容を読み込んで、SQLのインサート文に変換するプログラムを作成する。コマンドラインからファイル名を指定して標準出力に結果を書き出します。結果を保存したい場合は出力をリダイレクトしてファイルに保存します。

Excelファイルには顧客情報が入っています。1行目はラベルで、2行目以降に実際の値が入ってます。

名前 メール 住所
山田太郎 taro@sample.com 東京都品川区

プログラムの基本構造は以下のようになります。

ARGV.each do |filename|
  # ここで処理を行う
end

Excelファイルの読み込みには、win32oleライブラリを使用します。

require 'win32ole'

# INSERT文を出力する
def print_sql(cells)
  puts %Q{INSERT INTO customers (name, email, address) VALUES ("#{cells[0]}", "#{cells[1]}", "#{cells[2]}");}
end

begin
  excel = WIN32OLE.new('Excel.Application')
  excel.visible = false
  excel.displayAlerts = false

  ARGV.each do |filename|
    fullpath = File.expand_path(filename)
    # Excelファイルを開く
    book = excel.WorkBooks.Open(fullpath)
    begin
      # 最初のシート
      sheet = book.WorkSheets(1)
      sheet.UsedRange.Rows.each do |row|
        # ラベル行を読み飛ばす
        next if row.Row == 1
        cells = []
        row.Columns.each do |cell|
          cells << cell.Value
        end
        # インサート文を出力する
        print_sql(cells)
      end
    ensure
      book.Close
    end
  end
ensure
  excel.Quit
end