GoogleスプレッドシートをPythonで読み書き操作する-エラー対処もあるよ

Pythonで操作する対象として、Google Spread Sheetが使えたら、いちいちDB操作とかしなくて便利かなーと。調べてみました。スプレッドシートって、簡易データベースとして優秀ですよね。

スポンサーリンク

Google Spread Sheetを読み書きするまでの手順

プログラム

さて、お品書きはまとめて書くと大きく4点です。他の方は知りませんが、自分はググった内容を手順通りにやってもトラブルに見舞われる属性持ちですので、エラー対処も含めての4本立ててです。

1:Google側の設定をぐりぐりする
2:Pythonで必要なライブラリをimportする
3:読み書きするコードを書く
4:トラブルが発生するので対処する

手順1:参考にしたサイト

ググると、いろんなサイトが出てきますが情報が古いことが多いです。2018年11月現在、以下のサイトが役に立ちます。役に立つというか、「もう迷わない」の謳い文句通り手順通りにやれば全く迷いません!

Pythonからスプレッドシートにアクセスする方法を紹介します。データサイエンティストの役割は、スクレイピングや高度な計算・機械学習等で得たデータをわかりやすく伝えることです。MySQLやMongoDBといったデータベースに保存するのではく、誰もが簡単にアクセスできるスプレッドシートに保存してみよう!

ということで、改めて書き起こす必要ないので上記サイトを参考にw 手順1はここのサイト見れば完璧なので、割愛。

手順2、3:Python側の操作

プログラムは以下のサイトがわかりやすかったです。手順2、3はここ見れば分かるんで、割愛w じゃぁ何書くんだって?w

#Abstract Google スプレッドシートをpython用ライブラリgspreadを通して読み書きします.流れは(

手順4:されどエラー

そう、エラーの対処です!「もう迷わない」ってサイト見ても迷う自分が素敵。

<エラー内容>

print worksheet.cell(1,1)
params={‘valueRenderOption’: value_render_option}
url = SPREADSHEET_VALUES_URL % (self.id, quote(range, safe=”))
return ”.join(map(quoter, s))
KeyError: u’\u30b7′

なんぞ、KeyErrorなるものが出ています。なんじゃこれ。言われた通りにやっただけなのに。環境がpython 2.7系なだけにunicode系のエラーを疑います。というか、”\u30b7″とか出てるしきっとそう。ちなみに”\u30b7″は”シ”とのこと。”シート1”のシか?

<エラーの対処>

Environment info Operating System: Ubuntu Python version: 2.7.13 gspread version: 3.0.0 Steps to reproduce Create a workbook with sheet name in unicode like 中文 ...

答えはここに書いてありました。やはりunicode系のエラーでした。まさかのライブラリを直接変えろと書いてあります。勇気を振り絞って変更します。

gspreadライブラリ内の「models.py」ファイルを直接いじります。各関数で使われる、

url = SPREADSHEET_VALUES_URL % (self.id, quote(range, safe=”))

url = SPREADSHEET_VALUES_URL % (self.id, quote(range.encode(‘UTF-8’), safe=”))

に変えます。例えば、update関数であれば、114行目のrangeの後ろにencode(‘UFT-8’)を加える感じです。ちょっと怖いので、バックアップはお忘れなく。使う関数毎に同じ処理を加えていってください。

さて、直接いじって実行…できた!python2.7のバカバカ!!そろそろ3系にすべきなんでしょうか…でも環境構築がめんどくさい。

まとめ

ということで、いつもどおりのunicode系のエラーでした。正直理解できていませんがなんとかなり続けているので、しばらくはpython2.7系生活が続きそうです。根がズボラなので…