csv 无法使用python在google工作表的列中应用公式

pokxtpni  于 2022-12-06  发布在  Python
关注(0)|答案(1)|浏览(73)
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.异常. API错误:{“代码”:400,“消息”:'数据[0]处的值无效。值'(类型。googleapis.com/google.protobuf.ListValue),“=SUM(S:AE)”'
即使我在update方法中只给予了2个参数,它仍然说给出了3个。

这是谷歌工作表,我想在其中使用这个公式,但从第17行的前16行是预先填写。
请帮忙。先谢谢你了。

vlju58qv

vlju58qv1#

我相信你的目标如下。

  • 您希望使用gspread for python将公式=SUM(S:AE)放置到单元格“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",
  )

参考:

  • 批更新(数据,**kwargs)
  • update(范围名称,值=无,**kwargs)

相关问题