import pandas as pd
import pygsheets
import gspread
from gspread_dataframe import set_with_dataframe
from google.oauth2.service_account import Credentials
def csv_to_sheets():
tokenPath ='path for service account file.json'
scopes = ['https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive']
credentials = Credentials.from_service_account_file(tokenPath, scopes=scopes)
gc = gspread.authorize(credentials)
gs = gc.open('csv_to_gSheet')
workSheet1 = gs.worksheet('sheet1')
my_csv = pd.read_csv("my csv file path")
my_csv_values = my_csv.values.tolist()
row = str(len(workSheet1.get_all_values()) 1)
workSheet1.batch_update([
{"range": "A" row,"values": [[r[0]] for r in my_csv_values]},
{"range": "S" row,"values": [r[1:] for r in my_csv_values]},
],value_input_option="USER_ENTERED")
workSheet1.batch_update("AF","=SUM(S:AE)")
csv_to_sheets()
在這里,我試圖將我的 csv 中的資料添加到谷歌表格中,從“S”列到“AE”列,這是正確發生的。然后我嘗試在“AF”列中應用公式,但它拋出錯誤:gspread.exceptions.APIError: {'code': 400, 'message': 'Invalid value at 'data[0].values' (type.googleapis.com/google.protobuf.ListValue), "=SUM(S:AE)"'
即使我在更新方法中只給出 2 個引數,它仍然說給出了 3 個。

這是我想在其中使用此公式的 google 作業表,但從第 17 行開始,因為前 16 行已預先填充。
請幫忙。先感謝您。
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想
=SUM(S:AE)使用 gspread for python 將公式放入單元格“AF17”。
當我看到你的腳本時,我認為workSheet1.batch_update("AF","=SUM(S:AE)")需要修改。那么,下面的修改呢?
從:
workSheet1.batch_update("AF","=SUM(S:AE)")
至:
workSheet1.batch_update([{"range": "AF17", "values": [["=SUM(S:AE)"]]}], value_input_option="USER_ENTERED")
從您顯示的示例影像中,我認為您可能想將公式放入單元格“AF17”。如果你想把它放在另一行,請修改它。
在這種情況下,我認為下面的修改可能可以使用。
workSheet1.update("AF17", "=SUM(S:AE)", value_input_option="USER_ENTERED")
筆記:
雖然我不確定我是否能正確理解你的問題,例如當你想把公式放到 的每一行時
my_csv_values,下面的修改怎么樣?從
workSheet1.batch_update([ {"range": "A" row,"values": [[r[0]] for r in my_csv_values]}, {"range": "S" row,"values": [r[1:] for r in my_csv_values]}, ],value_input_option="USER_ENTERED")至
workSheet1.batch_update( [ {"range": "A" row, "values": [[r[0]] for r in my_csv_values]}, {"range": "S" row, "values": [r[1:] for r in my_csv_values]}, {"range": "AF" row, "values": [["=SUM(S" str(i int(row)) ":AE" str(i int(row)) ")"] for i, _ in enumerate(my_csv_values)]}, ], value_input_option="USER_ENTERED", )
參考:
- batch_update(資料,**kwargs)
- 更新(范圍名稱,值=無,**kwargs)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534885.html
標籤:Python格式文件谷歌表格google-sheets-api传播
