【Python】「gspread」で「 Googleスプレッドシート」のセルの値を取得・入力するなどセルを操作してみよう

python

みなさんこんにちは。zak-papaです。

前回は、「Google スプレッドシート」を操作する「gspread」の「ワークブック」「ワークシート」の操作方法についてお伝えしました。

python【Python】「gspread」で「 Googleスプレッドシート」のワークブック、ワークシートを操作してみよう

 

3ステップのうちの2つ目までですね。

「gspread」でスプレッドシートを操作するための3ステップ
  1. ワークブックの取得(指定)
  2. ワークシートの取得(指定)
  3. セル範囲の取得(指定)

spreadsheet

 

 

操作したいワークブックとワークシートは取得できたので、今回は「3つ目」の「セル」に対して値を「取得」したり「入力」したりしていきます。

順に見ていきましょう。

 

「セル」を操作する準備をしよう

事前準備(前回の復習)

前回と同じ内容になります。

私の動作環境は次の通りです。ご自身の使い慣れているものをお使いいただければと思います。
Windowsでも同じように動作すると思います。

OS macOS Catalina 10.15.3 Version Python 3.7.4
エディタ Visual Studio Code ブラウザ Google Chrome
ディレクトリ Desktop/gspread ファイル gspread_practice.py

 

ワークブックは「スプレッドシートキー」で取得、ワークシートは「sheet1」で一番左のシート(前回の続きなので「update title」)を取得しています。

 

spreadsheet_sample

 

 

「セル」を操作してみよう

「1つずつ」セルに値を「入力」する

まずは、1つずつセルに値を「入力」してみます。

セルに1つずつ値を入力するには、「update_acell()」の引数に「セルの場所」「値」を指定して記載します(A1表記)。入力というか単語の意味的には「更新」って感じですね。

では、「A1」から「A4」のセルに値を入力してみましょう。「A4」セルには「関数」も「クォーテーション」で囲んで入力します。
※ 一番左の「update title」シートを取得。次回以降最初の「3行」は割愛します。

 

 

上記を実行すると、スプレッドシートにリアルタイムに反映されているのが分かると思います。なんか気持ち良くて好きなんですよね。笑

update_acell

 

 

また、「行」と「列」を指定する「R1C1表記」でもセルに値を入力することができ、次のように「update_cell()」の引数に「行数」「列数」「」を指定します。

では、「B1〜B4」のセルに入力してみましょう。

 

こちらも「B1〜B4」のセルに値を入力することができましたね。

update_cell

 

A1表記の「update_acell()」とR1C1表記の「update_cell()」。
「a」があるかないかですがどちらも使えるようにしておきましょう。

 

 

「1つずつ」セルの値を「取得」する

続いて、1つずつセルの値を「取得」してみます。

セルの値を取得する場合も上記同様「A1表記(acell)」と「R1C1表記(cell)」どちらでも取得することができます。
では、次の「A1」と「B1」のセルの値を取得してみましょう。

A1_B1

 

コードはこちら。「value」属性を付けて取得します。

 

「A1」の「1」と「B1」の「4」が取得できましたね。

cell_acell

 

 

 

「複数のセル」を操作してみよう

「複数」のセルに値を「入力」する

続いて、「複数」のセルに一括で値を「入力」する方法を見ていきましょう。

「append_row()」を使って「行ごと」に値を入力することができます。「append_row」を使うと自動的にデータの「最終行」の次の行から入力してくれるため、特にセルの範囲を指定する必要はありません。

次のコードは、「append_row」の引数に「リスト型」のデータを渡して、データのある最終行の次の行(5行目)に入力するコードです。「複数行」を追加する場合は「for文」でループさせます。

 

 

5行目から7行目(A5〜B7)にデータが入力されましたね。

append_row

 

 

「複数」のセルの値を「行ごと取得」する

今度は、「複数」のセルの値を「取得」してみましょう。
「行ごと」「列ごと」「すべて」の3パターンの取得方法について見ていきます。


まずは、「行ごと」にデータを取得します。先ほどのスプレッドシートの「2行目」を取得してみましょう。

spreadsheet_sample_2行目

 

 

「行ごと」のデータを取得するには、「row_values()」の引数に「行数」を指定して取得します。

では、次の3パターンを出力してみます。
①行のデータを「リスト」で出力、②「リスト」から1つの値を出力、③リストの全ての値を出力

 

それぞれ取得できました。

row_values

 

 

「複数」のセルの値を「列ごと取得」する

続いて、「列ごと」にデータを取得します。先ほどのスプレッドシートの「2列目(B列)」を取得してみましょう。

spreadsheet_sample_B列

 

 

「列ごと」のデータを取得するには、「col_values()」の引数に「列数」を指定して取得します。

では、先ほどと同じように次の3パターンを出力してみます。
①列のデータを「リスト」で出力、②「リスト」から1つの値を出力、③リストの全ての値を出力

 

それぞれ取得できました。

col_values

 

 

「複数」のセルの値を「すべて取得」する

最後に、スプレッドシート にあるデータを「全て」取得(A1:B7)してみましょう。

spreadsheet_sample_A1_B7

 

 

「全て」のデータは、「get_all_values()」を使用して「二次元リスト」で取得できます。

同じように次の3パターンを出力してみます。
①全てのデータを「二次元リスト」で出力、②「二次元リスト」から1つの値を出力、③全ての値を出力

※ なお、②についてはインデックス2つを使用して取得。③については「for」文1回で「行ごと」のデータをリストで取得、「for」文2回で「全て」の値を1つずつ取り出しています。

 

こちらもそれぞれ取得できています。(一部省略)

get_all_values

 

「その他」のセルの操作方法

上記で説明した方法以外も一覧にまとめてみます。

 

 

「リクエスト回数」の制限について

Pythonでスプレッドシートを読み書きする場合、下記のように制限が設けられているようです。
例えば、一番始めに「A1」から「A4」までセルに値を1つずつ書き込みましたが、これだけで「4回」のリクエストになります。

リクエスト回数の制限について
  1. ユーザーごとに100秒あたり100件のリクエスト
  2. 1回のプログラムで設定できる最大値は1,000件まで
  3. さらに1秒あたり10件まで

【参考】API リクエストの制限と割り当て
【参考】Google Cloud Platform_Google Sheets API

 

Read_requests_per_100_seconds

 

 

 

リクエスト回数が増えてくると処理時間にも影響が出てきます。

大量のデータを扱う際は、一度リストに格納して一括で書き込むなど少し工夫が必要なようです。このあたりは別の機会に説明できればと思います。

 

 

  終わりに

以上、「gspread」で「Google スプレッドシート」の「セル」の値の取得・入力などの操作方法をお伝えしました。

前回の記事(ワークブック、ワークシートの操作方法)と今回の記事を読んでもらえれば大体の作業はできると思います。

【参考】公式サイト(gspread)

 

次回はPythonの得意な「スクレイピング」で取得したデータを「gspread」を使ってGoogle スプレッドシートに書き出す処理について説明したいと思います。

 

 

以上となります。最後まで読んでいただきありがとうございました!