Ruby
GoogleSpreadSheet

RubyからGoogleSpreadsheetに書く - お手軽編

More than 1 year has passed since last update.


必要ライブラリインストール

https://github.com/gimite/google-drive-ruby をインストール

# cat /etc/redhat-release

CentOS release 6.7 (Final)
# ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
# gem -v
2.5.1
# gem install google_drive
~略~
# gem list | grep google_drive
google_drive (2.1.1)


GoogleDrive接続設定ファイル作成

以下のrbファイルを作成する


setup.rb

require "google_drive"

# 初回実行時は、表示されるURLにGoogleログイン済のブラウザでアクセスし、表示された文字列を入力する必要あり
GoogleDrive::Session.from_config("google_drive_config.json")


上記を実行すると、URLが表示され、入力待ちになる

$ ruby setup.rb

1. Open this page:
https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=~略~

2. Enter the authorization code shown in the page:

上記URLにGoogleログイン済ブラウザでアクセスすると以下の画面が表示される

ブラウザ画面その1

許可ボタンを押下すると以下の画面が表示される

ブラウザ画面その2

当該文字列を先程の「2. Enter the authorization code shown in the page:」に入力

google_drive_config.jsonファイルが作成される


ワークシート取得クラス


google_drive_wrapper.rb

require "google_drive"

class GoogleDriveWrapper
# ワークシート取得
# (フォルダ/スプレッドシート/ワークシートがなければ作成)
def self.get_worksheet(folder_name, spreadsheet_name, worksheet_name)
session = GoogleDrive::Session.from_config("google_drive_config.json")

folders = session.collections("q" => ["name = ? and trashed = false", folder_name])
folder = nil
if folders.length == 0
folder = session.root_collection.create_subcollection(folder_name)
puts "フォルダ '" + folder_name + "' を作成しました。"
else
folder = folders[0]
end

spreadsheets = folder.files("q" => ["name = ? and mimeType = 'application/vnd.google-apps.spreadsheet' and trashed = false", spreadsheet_name])
worksheet = nil
if spreadsheets.length == 0
# スプレッドシートをrootに作成、指定フォルダに追加、rootから削除
spreadsheet = session.create_spreadsheet(spreadsheet_name)
folder.add(spreadsheet)
session.root_collection.remove(spreadsheet)
puts "スプレッドシート '" + spreadsheet_name + "' を作成しました。"
# ワークシートを追加、元からあった1シート目は削除
worksheet = spreadsheet.add_worksheet(worksheet_name)
spreadsheet.worksheets[0].delete
puts "ワークシート '" + worksheet_name + "' を作成しました。"
else
spreadsheet = spreadsheets[0]
worksheet = spreadsheet.worksheet_by_title(worksheet_name)
if worksheet.nil?
worksheet = spreadsheet.add_worksheet(worksheet_name)
puts "ワークシート '" + worksheet_name + "' を作成しました。"
end
end
worksheet
end
end



呼び出し側


xxx.rb

require 'google_drive'

require './google_drive_wrapper'

worksheet = GoogleDriveWrapper.get_worksheet("フォルダ1", "スプレッドシート1", "ワークシート1")
worksheet[1, 4] = "xxx" # 1行目4列目に書き込み
worksheet.save # 保存



TODO

お手軽じゃない方法

 Java編 http://qiita.com/pilot/items/85bae4e5d5e35ffa7019 をやってみたら

 本記事の内容はあまり良くない方法だった

 (利用ライブラリ内のsecretを使っていたり)