Python学習【365日チャレンジ!】355日目のマスターU(@Udemy11)です。
あれよあれよという間に、1月も今日で終了です。
ほんと年を取ると、時間が経つのが速くなるといいますが、1ヶ月なんて、まじであっという間に過ぎ去ってしまいます。
なにかの記事で見かけたのですが、年をとって、時間が経つのが速く感じるのは、感動することが少ないからだそうです。
経験が少ない若いときは、初めて体験することも多くて、何かしら日々感動することが多いため、1日の中で記憶に残ることが多いそうです。
一方で、年齢と経験を重ねると、初めての体験がなくなり、日々の感動が少なくなると、記憶に残すことが少なくなって、1日の記憶が少ないため、時間が速く感じるということらしいです。
感動しそうなことを意識して体験するようにすれば、より充実した日常をおくれるということです。
ということで、今日も、感動を求めてPython学習を始めましょう。
昨日の復習
昨日は、PythonでGoogleスプレッドシートを操作するためにスプレッドシートの初期設定をおこないました。
初期設定は非常に簡単で、新規スプレッドシートもしくは、Pythonから操作したいスプレッドシートに、Google Cloud Platformで作成したプロジェクトのアカウントサービスのメールを入力して共有するユーザーを追加するだけでした。
くわしくは、こちらの記事をごらんください。
また、Pythonからスプレッドシートを操作するためのGoogle Cloud Platformの初期設定はこちらの記事をごらんください。
今日は、Googleスプレッドシートの指定されたセルに入力されている値を取得して、その値を元に計算した結果を指定したセルに書き込むプログラムを作成したいと思います。
必要なライブラリ
今回使うライブラリは次の2つです。
- gspread
- oauth2client
gspread
は、スプレッドシートを操作可能にするライブラリで、oauth2client
は、Googleの各種APIへのアクセスを可能にするライブラリです。
これらの外部ライブラリをターミナルからpip
でインストールしておきましょう。
pip install gspread
pip install oauth2client
コードの流れ
まず、今回書くコードの流れを見ておきましょう。
- 必要なライブラリをインポート
- 認証情報を設定
- Google Cloud Platformにログイン
- 操作するスプレッドにアクセス
- 値を取得し、値を入力する
このような流れで書いたコードがこちら
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scopes = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('ダウンロードしたjsonファイル', scopes)
gc = gspread.authorize(credentials)
SHEET_KEY = 'スプレッドシートキー'
worksheet = gc.open_by_key(SHEET_KEY).sheet1
import_value = int(worksheet.acell('A1').value)
for i in range(10):
num_v = import_value * (i + 1)
worksheet.update_cell((i + 1), 2, num_v)
json
ファイルを扱うので、json
ライブラリのインポートが必要な気もしますが、ServiceAccountCredentials
でjsonファイルを読み込むだけなので、json
ライブラリをインポートする必要はありません。
どんな計算をするかというと、9行目から10行目に記述していますが、スプレッドシートのA1
に入力されている値を取得して、その値にそれぞれ1から10までを掛けた結果をB1
からB10
に順番に入力するコードになっています。
コードをパーツに分けてチェックしてみます。
必要なライブラリをインポート
最初に必要なライブラリをインポートしています。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
gspread
とoauth2client
からServiceAccountCredentials
をインポートしています。
認証情報を設定
次は、認証情報を保存したjson
ファイルを読み込んでクレデンシャル変数に代入します。
scopes = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('ダウンロードしたjsonファイル', scopes)
4行目で使うAPIを2つ指定してscopes
に代入します。
5行目でscopes
とjson
ファイルを使ってServiceAccountCredentials
クラスでクレデンシャル変数を作成します。
ダウンロードしたjsonファイル
の部分は、Google Cloud Platformでダウンロードした秘密鍵のファイル名で、例えばダウンロードしたファイルが【secret-33892-kcidik89d.json】だとすると、5行目のコードの()部分は次のようになります。
('secret-33892-kcidik89d.json', scopes)
そして、ダウンロードしたファイルをこのコードのPythonファイルと同じ階層に移動させます。
Pycharmの場合はこんな感じになります。
Google Cloud Platformにログイン
次は、作成したクレデンシャル変数を使って、Google Cloud Platformにログインオブジェクトを生成します。
gc = gspread.authorize(credentials)
操作するスプレッドにアクセス
さらに操作するスプレッドシートのスプレッドシートキーを取得して、スプレッドシートにアクセスします。
アドレスバーにあるこの文字列部分です。
https://docs.google.com/spreadsheets/d/1NIfLN8Me4StwedlXIq3Bc7tOaAKm3gOKIpmbvGJ14h0/edit#gid=0
この赤色の部分の文字列を、次のコードのスプレッドシートキー
の部分に入力します。
SHEET_KEY = 'スプレッドシートキー'
worksheet = gc.open_by_key(SHEET_KEY).sheet1
8行目で先に生成したログインオブジェクトgc
にSHEET_KEY
を使って操作するスプレッドシートにアクセスします。
値を取得し、値を入力する
スプレッドシートのA1
に入力されている値を取得して、計算した結果をB1
から順番に入力していきます。
import_value = int(worksheet.acell('A1').value)
for i in range(10):
num_v = import_value * (i + 1)
worksheet.update_cell((i + 1), 2, num_v)
9行目でワークシートのセルから取得した値をimport_value
に代入しています。
11行目からrange
を使ったfor
ループで10回繰り返して計算していますが、import_value
にi + 1
つまり1
を掛けた値num_v
を、セル(i + 1), 2
つまりB1
に入力し、次のループに入るコードです。
ループは10回繰り返すので、最後の値はセルのB10
に代入されます。
動作確認
今回も動作がわかりやすいように、動画にしてみました。
たった16秒の動画ですが、実行したあとのスプレッドシートの値の自動入力が写っていなかったり、Googleスプレッドシートのセルに値を入れ忘れていたりで何度か撮り直しをしました。
きちんと動画が取れたら、あとはYoutubeにアップロードして、ちょこちょこっと説明文を入れるだけなので、ほんとすごい世の中になりましたね。
まとめ
Google Cloud PlatformとGoogleスプレッドシードの設定が問題なくできていれば、今日のコードはスムーズに動くはずです。
ただ、秘密鍵をおいているフォルダが違ったり、単純にスペルミスをしているとエラーが起こるので、エラーの原因を見極めてコードを修正するようにしましょう。
Googleスプレッドシートの値を取得したり、計算結果を自動で入力したりするだけなら、普通にスプレッドシートを使うだけでこと足りますが、この連携が本領を発揮するのはやはりデータベースとしてGoogleスプレッドシートを活用できるところだと思うので、データベース的な使い方を模索していこうと思います。
それでは、明日もGood Python!