Excelのレコードをインサート文に変換する
rubyでExcelファイルの内容を読み込んで、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