无法从csv将值附加到Google工作表中的特定列

hyrbngr7  于 2022-12-06  发布在  Go
关注(0)|答案(1)|浏览(143)
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.异常. API错误:{“代码”:400,“消息”:“”数据.值[0]“处的值无效(类型. googleapis.com/google.protobuf.ListValue)
我该怎么做才能一起做,请帮忙,提前谢谢。

这是第一行作为标题的输入csv。

这就是我如何需要我的输出在谷歌工作表。日期应该在第一列和其余的数据应该附加从列“S”。

输入如图1所示。图3显示了google工作表中的输出。工作表中已经存在直到第16行的数据。我们需要追加从第17行开始的数据。当我们使用修改并第一次运行脚本时,这些值正确地附加在“A”列和除“S”列以外的其余列中。(检查第17行到第23行的“S”列)。但是,当我第二次运行相同的修改脚本时,值不仅正确地附加在“S”列中,而且也正确地附加在其他列中。(检查第24行到第27行的“S”列)
因此,我想了解为什么我在第17行到第23行的“S”列中获得了这些值,而这些值甚至没有出现在我的输入中,我应该做些什么才能在第24行到第27行中获得正确的值。

z31licg0

z31licg01#

修改点:

  • 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调用来完成。

相关问题