share facebook facebook twitter menu hatena pocket slack

2014.10.28 TUE

Ruby から Google SpreadSheet をいじるメモ

川原 洋平

WRITTEN BY 川原 洋平

どうも、cloudpackかっぱ@inokara)です。

はじめに

先日 sensu の 通知ハンドラとして Google SpreadSheet へ飛ばすハンドラを作った(※作ってみた)際に、そもそも Ruby から Google SpreadSheet をどんな風に使うのかをメモってなかったのメモっておきます。

あくまでも試行錯誤の結果ですのでコードは汚い、キツイ、危険の 3K かもしれませんので、万が一、参考にされる際には十分にご注意下さい…。また、編集リクエストもお待ちしております!m(__)m


参考


事前作業

必要なもの

事前に必要な作業


やりたいこと別チートシート

レコード数やカラム数を取得

#!/usr/bin/env ruby

require "rubygems"
require "google_drive"

# 初期化
# OAuth を利用して認証
session = GoogleDrive.login("#{Gmail アカウント}", "#{アプリのパスワード}")
# ws インスタンス生成
ws = session.spreadsheet_by_key("#{スプレッドシートの ID}").worksheets[0]

# レコード数を取得
puts ws.num_rows
# カラム数を取得
puts ws.num_cols

シートのレコードを取得する

#!/usr/bin/env ruby

require "rubygems"
require "google_drive"

# 初期化
# OAuth を利用して認証
session = GoogleDrive.login("#{Gmail アカウント}", "#{アプリのパスワード}")
# ws インスタンス生成
ws = session.spreadsheet_by_key("#{スプレッドシートの ID}").worksheets[0]

# こんだけ
for row in 1..ws.num_rows
  for col in 1..ws.num_cols
    puts ws[row, col]
  end
end

もちろん、以下のようにセルを指定しても良いようです。

puts ws[100,100]

セルに値をぶっこむ

#!/usr/bin/env ruby

require "rubygems"
require "google_drive"

# 初期化
# OAuth を利用して認証
session = GoogleDrive.login("#{Gmail アカウント}", "#{アプリのパスワード}")
# ws インスタンス生成
ws = session.spreadsheet_by_key("#{スプレッドシートの ID}").worksheets[0]

# こんだけ
ws[100,100] = "hoge"
ws.save

セルの 100,100 に “hoge” を書き込んで ws.save で保存します。

も少し複雑なレコードをぶっこむ

GoogleDrive::List クラスの push メソッドを使ってレコードをぶっ込むことが出来ます。

#!/usr/bin/env ruby

require "rubygems"
require "google_drive"

# 初期化
# OAuth を利用して認証
session = GoogleDrive.login("#{Gmail アカウント}", "#{アプリのパスワード}")
# ws インスタンス生成
ws = session.spreadsheet_by_key("#{スプレッドシートの ID}").worksheets[0]

# レコードをハッシュで生成
hash = {"timestamp" => "100" , "record" => { "a" => "10", "d" => "11", "e" => "12", "x" => "13" }}

# ヘッダを生成
ws.update_cells(1, 1, [hash["record"].keys])
# 一旦 save
ws.save

begin
  timeout(5) do
    # これでぶっ込む
    ws.list.push(
      hash["record"].each do |k, v|
        ["#{k}" => "#{v}"]
      end
    )
    ws.save
  end
rescue Timeout::Error
  puts "Google SpreadSheet-- Timed out while attempting to send"

二回程叩くと以下のようにレコードが入ってきました。嬉しい。

Ruby から Google Spreadsheet にデータを入力する

上記の通り push メソッドはハッシュをそのままぶっこんでくれるので便利だと思いました。あと、SpreadSheet 関係無いですが、hash.keys とか hash.values だけでハッシュのキーだけ、ハッシュの値だけが取れるのって嬉しいですな。

最後に

自分のような Ruby 初心者でも簡単にシートに値を突っ込むことが出来ました。(※良し悪しは置いておいて)も少し頑張って色々と応用出来ればなあと妄想しています。

元記事はこちらです。
Ruby から Google SpreadSheet をいじるメモ