はじめに

pythonのgspreadで、Googleスプレッドシートに関数を直接入力しようとしたら文字列として扱われてしまった

あらかじめ関数を入力した列を用意したかった

となりの列のセルの文字数をカウントする関数を入力したかったので、以下のような記述をして書き出してみた


cell_list = wks.range('A3:A10')

for i,cell in enumerate(cell_list):
		cell.value = "=len(B"+str(i+1)+")"

wks.update_cells(cell_list)

が、これだと '=len(Bi) の形で書き出されてしまい、式ではなく文字列として扱われてしまった。試しにバッチじゃなくて、一ヶ所だけ書き出してみる


wks.update_acell('A1', "=len(B1)")

上記の方法だとうまくいく。が、大量の行には対応できない。範囲していの時は何か特別な事をしないといけないようだ・・・

Google Sheets のリファレンスにオプションの記述

色々と調べると、Google Sheetsのサイトに APIのリファレンスがあり、updateの際のオプションが書いてあった


INPUT_VALUE_OPTION_UNSPECIFIED | Default input value. This value must not be used.

RAW | The values the user has entered will not be parsed and will be stored as-is.

USER_ENTERED | The values will be parsed as if the user typed them into the UI. Numbers will stay as numbers, but strings may be converted to numbers, dates, etc. following the same rules that are applied when entering text into a cell via the Google Sheets UI.


一つ目はデフォルトだけど、指定しないように書いてあるので、RAWかUSER_ENTEREDを指定するようだ。RAWは、そのまま表示されるということで、試しにしてみたら、文字列として扱われてしまった。続いて、USER_ENTEREDを指定。無事関数が動いた。以下の赤文字のところを追記すればいい。


cell_list = wks.range('A3:A10')

for i,cell in enumerate(cell_list):
		cell.value = "=len(B"+str(i+1)+")"

wks.update_cells(cell_list,value_input_option='USER_ENTERED')

ちなみに、今回は関数を動かしたいので、USER_ENTEREDを指定したが、たとえば数字を文字列として入力したい場合などは、RAWを指定すれば日付や数字として変換されないようだ