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()
for ele in my_csv_values:
workSheet1.update("A" str(len(workSheet1.get_all_values()) 1), ele[0], value_input_option="USER_ENTERED")
workSheet1.update("S" str(len(workSheet1.get_all_values()) 1), ele[1:], value_input_option="USER_ENTERED")`
csv_to_sheets()
我有一個 csv,它有一個日期列,其余的是資料列。我想將此 csv 附加到谷歌表,這樣,我的日期列被附加到谷歌表的“A”列,其余資料從“S”列附加,中間沒有任何內容。如果我嘗試遵循上述方法,則會在附加資料列(最后一行)時出現巨大錯誤: gspread.exceptions.APIError: {'code': 400, 'message': "Invalid value at 'data.values [0]' (type.googleapis.com/google.protobuf.ListValue)
我該怎么做才能一起做。請幫忙。先感謝您。

這是以第一行作為標題的輸入 csv。

這就是我在谷歌表格中需要我的輸出的方式。日期應在第一列,其余資料應從“S”列附加。

輸入如圖1所示。圖 3 顯示了 google sheet 中的輸出。直到第 16 行的資料已經存在于作業表中。我們需要從第 17 行開始追加資料。當我們使用修改并第一次運行腳本時,值正確地附加在 col 中。“A”和除col之外的其余列。“S”。(檢查第 17 行到第 23 行的“S”列)。但是當我第二次運行相同的修改腳本時,這些值不僅被正確附加在 col. “S”,但在其他列中也是如此。(從第 24 行到第 27 行檢查 col.“S”)
所以,我想了解為什么我會在 col 中獲得這些值。第 17 行到第 23 行中的“S”甚至沒有出現在我的輸入中,我應該怎么做才能獲得第 24 行到第 27 行中的正確值。
uj5u.com熱心網友回復:
修改點:
- 在 的情況下
for ele in my_csv_values:,每行上傳,每個回圈使用 3 個 API 呼叫。 - 而且,在您的腳本中,
ele[0]沒有陣列。并且,ele[1:]是一維陣列。在這種情況下,會發生錯誤。我認為這可能是您當前錯誤訊息的原因。
當這些點反映在你的腳本中時,下面的修改怎么樣?
從:
for ele in my_csv_values:
workSheet1.update("A" str(len(workSheet1.get_all_values()) 1), ele[0], value_input_option="USER_ENTERED")
workSheet1.update("S" str(len(workSheet1.get_all_values()) 1), ele[1:], value_input_option="USER_ENTERED")`
至:
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",
)
- 通過這個修改,這個程序可以通過 2 個 API 呼叫來完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/533091.html
下一篇:用特定值替換空白單元格
