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” 関連記事の目次
- CentOSにcurb(ruby)をインストールする手順
- Windows7にcurb(ruby)をインストールする手順
- Windows7の環境でRubyでMySQLに接続する手順
- Ruby curbでリファラーとユーザーエージェントを設定してWebページを取得
- Windows7でruby2、open-uriを使ってWebページを取得
- Ruby open-uriでリファラーとユーザーエージェントを設定してWebページを取得
- Ruby curb、scan、gsubを使ってWebページから特定の情報を抽出
- RubyでWebサイト上のPDFファイルの情報を取得
- RubyでWebサイト上のエクセルファイルの情報を取得
- Rubyで既存のエクセルファイルにデータを追加
- RubyでWebページの応答時間を計測し、メールで通知
- Ruby curbでPOSTデータ送信
- curbでRailsアプリのクッキー、セッションIDを取得し、ログイン
- Ruby mysql2でSQLインジェクション対策
- Ruby mysql2でデータをテーブルに登録