0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Sheets APIで "tried writing to column [G]" エラーが出た時の対処法

Posted at

Googleスプレッドシートとpythonで自動入力ツールを作っていたところ、タイトルのエラーが発生しました。原因や解決方法をまとめます。

実装していた機能の詳細

Google MapからAPIを使って複数の値を取得し、Googleスプレッドシートに自動で書き込むスクリプトを作成していた。
取得した2つの値をスプレッドシートのF,G列にそれぞれ書き込むことを想定してコードを書き、実行した時にエラーが発生した。

エラー概要

spread.exceptions.APIError: [400] but tried writing to column [G] 

エラーを読むと、G列に書き込もうとしていることが問題らしい。
F,Gに書き込むのは想定通りだが、受け付けてくれていない。コードはF列まで書き込むことを想定しているようだ。

解決方法

書き込む範囲をしていたのは以下の部分である。

cell_range = f"F{row_index}:{chr(64 + len(values) + 4)}{row_index}"  

上記の+4の部分を+5にすることで解決した。

原因と解説

エラー時のコードだと、cell_rangeがF4:F4になるのが原因。
valuesは2つあるので、「Gにはみ出しちゃうけど、指定した範囲と違うよね?」って教えてくれてる。

詳しく説明します
chr()は数値を文字に変換する関数。つまり、数字によって列を作ろうとしている。65=Aで、そこからアルファベットが続く。

それを前提にコードを見てみます(算数の問題)。
chr(64 + len(values) + 4)}を分解すると...

64はAの手前、len(values)は出力する値の数(今回は2)。
そして、+4で始点から数えるため、揃えるために置いてる数。

つまり、始点からvaluesの分だけ進んだ列を終点にするという書き方。
64+2+4=70(F)なので、終点をFにしてしまっているのである。

len(values) 64 + len(values) + 4 の計算 chr(…) 終列 意味
1 64 + 1 + 4 = 69 'E'      E列   1つだけしか書けない。F列すら含まれない。NG
2 64 + 2 + 4 = 70 'F' F列 2つ目を書こうとするとG列に出るけど、範囲外でエラー
2(正解) 64 + 2 + 5 = 71 'G' G列 F列・G列の2つぶんが範囲内。OK

Gを終点にしたいので、+5にして69からvaluesの分(今回は2)右に進むようにすることで解決した、ということです。

つぶやき

将来的に取得する値が3つ、4つと増えていく可能性があるため、 cell_range は動的に len(values) を使って柔軟に対応できるようにしてあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?