🐶

Python×Selenium×gspreadでよく使うコードTips

2021/05/18に公開

スプレッドシート更新時に列数をアルファベット表記に直すロジック

要は26進数だとおもって処理してあげればいいんだよね。Spreadsheet更新するとき割と使うからメモ。

import math

アルファベット = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
           'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
           'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']


#  うけとったIndexをSpreadSheet列番号(A1 notation)に変換して返すメソッド
#  0 -> A
#  25 -> Z
#  26 -> AA
#  52 -> BA
def 数字をスプレッドシート用列番号に変換(列数):
    if 列数 >= len(アルファベット):
        return 数字をスプレッドシート用列番号に変換(math.floor(列数 / len(アルファベット)) - 1) + 数字をスプレッドシート用列番号に変換(列数 % len(アルファベット))
    return アルファベット[列数]

googleスプレッドシートへの複数行列への更新を行う方法

google スプレッドシートは100秒以内に100リクエスト超えるとエラーを返すように設定されているので、
データ更新時はなるべくまとめて更新してあげるのがコツ。
以下のメソッドでは、始行, 終行, 始列, 終列をあたえることで特定の行列にデータを流し込むことができる。

更新するデータリストは1次元配列にしないと行けないので注意!


def スプレッドシート更新_複数行列(更新するデータリスト, 始行, 終行, 始列, 終列, 更新対象スプレッドシート):
    
    更新始列_変換後 = 数字をスプレッドシート用列番号に変換(始列)  #上記 スプレッドシート更新時に列数をアルファベット表記に直すロジック参照
    更新終列_変換後 = 数字をスプレッドシート用列番号に変換(終列)  #上記 スプレッドシート更新時に列数をアルファベット表記に直すロジック参照

    # 編集する範囲を指定、A1セルから、リストの要素数をカウントしたものを指定する
    スプレッドシート用更新リスト = 更新対象スプレッドシート.range(
        更新始列_変換後+str(始行)+':' + 更新終列_変換後+str(終行)
    )
    # cell_listにtest_listの値を流し込む
    for i, cell in enumerate(スプレッドシート用更新リスト):
        cell.value = 更新するデータリスト[i]

    # 最後にupdate_cellsで流し込む
    更新対象スプレッドシート.update_cells(スプレッドシート用更新リスト, value_input_option='USER_ENTERED')

スプレッドシートにデータを挿入する際、式や日付を認識させたい

update_cellsする際に value_input_option='USER_ENTERED' を付けてあげる

更新対象スプレッドシート.update_cells(スプレッドシート用更新リスト, value_input_option='USER_ENTERED')

スプレッドシートにデータを挿入する差異、'001'を'1'に変換させたくない

書式なしテキストとして挿入したいのだけど、スマートなやり方が分からなかった。。(誰か知ってたら教えてください)
とりあえず、'001'にクォーテーションマークを付けてあげることで(強引に)解決した

更新したいデータ = '001' #このままだとスプレッドシートに挿入したときに「1」に変換されてしまう
スプレッドシート用更新データ =  "'" + 更新したいデータ # 「'」を先頭につけることで文字列と認識させることができる
GitHubで編集を提案

Discussion