Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?
@kou_pg_0131

【Ruby】Googleスプレッドシートを読み書き

More than 1 year has passed since last update.

前提

このドキュメントは以下を前提として進めます。

  • Google Drive APIを有効にしていること
  • Google Sheets APIを有効にしていること
  • Google OAuth2クライアントIDを取得していること
  • Google OAuth2クライアントシークレットを取得していること
  • Google OAuth2リフレッシュトークンを取得していること

準備

google_drivegemをインストールします。
以下のコマンドを実行するか、Gemfileに追記します。

gem install google_drive

or

gem 'google_drive'

今回検証するスプレッドシート

before.png

サンプルコード

# frozen_string_literal: true

require 'google_drive'

client_id     = 'xxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com'
client_secret = 'xxxxxxx-xxxxxxxxxxxxxxxx'
refresh_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# 認証情報を生成する
credentials = Google::Auth::UserRefreshCredentials.new(client_id: client_id,
                                                       client_secret: client_secret,
                                                       refresh_token: refresh_token)

# セッションを生成する
session = GoogleDrive::Session.from_credentials(credentials)

# スプレッドシートIDを元にスプレッドシートを取得
spreadsheet_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
spreadsheet    = session.spreadsheet_by_key(spreadsheet_id)
p spreadsheet
# => #<GoogleDrive::Spreadsheet id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" title="スプレッドシートのタイトル">

# 全てのワークシートを配列で取得
worksheets = spreadsheet.worksheets
pp worksheets
# => [#<GoogleDrive::Worksheet spreadsheet_id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", gid="xxxxxxxxxx", title="シート1">,
#     #<GoogleDrive::Worksheet spreadsheet_id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", gid="xxxxxxxxxx", title="シート2">,
#     #<GoogleDrive::Worksheet spreadsheet_id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", gid="xxxxxxxxxx", title="シート3">,
#     #<GoogleDrive::Worksheet spreadsheet_id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", gid="xxxxxxxxxx", title="シート4">,
#     #<GoogleDrive::Worksheet spreadsheet_id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", gid="xxxxxxxxxx", title="シート5">]

# ワークシートをシート名を元に取得
worksheet_title = 'シート1'
worksheet = spreadsheet.worksheet_by_title(worksheet_title)
p worksheet
# => #<GoogleDrive::Worksheet spreadsheet_id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", gid="xxxxxxxxxx", title="シート1">

# 全ての行を取得
# 2次元配列で取得される
# 空のセルは空文字が入る
rows = worksheet.rows
pp rows
# => [["A1セル", "B1セル", "C1セル", "D1セル"],
#     ["A2セル", "B2セル", "C2セル", "D2セル"],
#     ["A3セル", "B3セル", "C3セル", ""]]

# セルから値を取得
p worksheet[1, 1]
# => "A1セル"

# セルに値を入力
# NOTE: worksheet.saveを実行しない限り、変更は保存されない
worksheet[1, 1] = 'hogehoge'
p worksheet[1, 1]
# => "hogehoge"

# 変更を保存
worksheet.save

上記スクリプト実行後

A1セルの値が書き換えられているのが確認できる。
after.png

参考

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kou_pg_0131
Goが好き

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
8
Help us understand the problem. What is going on with this article?