VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

Rubyで既存のエクセルファイルにデータを追加

Rubyを使って、既存のエクセルファイルをオープンし、指定したセルにデータを追加、ファイル名を指定して保存するスクリプトを作成してみました。

1)仕様


 
①既存のエクセルファイル
 
・ファイル名 xls\format.xls
・最初の2行は、項目名などのヘッダー行。
・項目名が記入済みで、1~4(0が最初の列)の列がデータ欄。
 
②追加するデータ
 
・テキストのデータファイル data\input.txt
・スペース区切りの数値のデータ
 
③出力ファイル
 
・ファイル名 xls\output.xls
 
④追加方法
 
・最初の2行はヘッダー行なので3行目から書き込む。
 
・0列は項目名が記述済みなのでそのまま使用。1~4列に、テキストデータから入力されたデータを挿入する。
 

2)サンプルコード作成


 
# -*- coding: utf-8 -*-
require 'spreadsheet'

path = "data\\input.txt"
txt_data = File.read(path, :encoding => Encoding::UTF_8)
tmp_row=txt_data.scan(/.*$/)

ary_rows = []
tmp_row.each do |row|
  tmp_ary=row.split(" ")
  ary_rows.push(tmp_ary[0..3])
end

Spreadsheet.client_encoding = 'UTF-8'
book = Spreadsheet.open "xls\\format.xls"
sheet1 = book.worksheet 0

i=2
ary_rows.each do |row|
  sheet1[i,1] = row[0].to_i
  sheet1[i,2] = row[1].to_i
  sheet1[i,3] = row[2].to_i 
  sheet1[i,4] = row[3].to_i
  i += 1
end
book.write "xls\\output.xls"

 

3)サンプルコードの説明


 
①追加するテキストファイルを読込み、各行毎に配列に保持
 
path = “data\\input.txt”
txt_data = File.read(path, :encoding => Encoding::UTF_8)
tmp_row=txt_data.scan(/.*$/)
 
②半角スペース区切りのデータを各セルデータ毎に配列に保持
 
ary_rows = []
tmp_row.each do |row|
 tmp_ary=row.split(” “)
 ary_rows.push(tmp_ary[0..3])
end
 
③エクセルのワークブックをオープン。
 
Spreadsheet.client_encoding = ‘UTF-8’
book = Spreadsheet.open “xls\\format.xls”
 
④ワークシートのインデックスを指定してワークシートにアクセス
 
sheet1 = book.worksheet 0
 
⑤各セル単位に入力データを上書き
 
sheet1[i,1]でi行目の1列目(いずれも0から数えて)のセルにデータを書き込みます。
 
i=2
ary_rows.each do |row|
 sheet1[i,1] = row[0].to_i
 sheet1[i,2] = row[1].to_i
 sheet1[i,3] = row[2].to_i
 sheet1[i,4] = row[3].to_i
 i += 1
end
 
⑥ファイル名を指定して上書きしたエクセルファイルを保存
 
book.write “xls\\output.xls”
モバイルバージョンを終了