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を使っていたり)