私信  •  关注

tehhowch Tanaike

tehhowch Tanaike 最近创建的主题
tehhowch Tanaike 最近回复了
6 年前
回复了 tehhowch Tanaike 创建的主题 » python-google sheets api-不写入指定范围
  • 你想把 [[max_temp, avg_temp, min_temp]] B-C、E-G和H-J列。

如果我的理解是正确的,那么这次修改怎么样?

修改点:

  • 如果 values.append 使用时 [最高温度,平均温度,最低温度]] 'Sheet1!B:D' 分别用作值和范围,将值放入列A-C。即使 'Sheet1' 使用时,结果相同。
  • 写作 [最高温度,平均温度,最低温度]] 对于B-C列,有两种方法:
    1. 当最后一行假设为10时,它使用 'Sheet1!B11' 作为射程。
      • 在这种情况下,需要知道最后一行。
    2. 使用范围时 “第1张!B:D' ,它使用 [["", max_temp, avg_temp, min_temp]] 作为价值。
      • 在这种情况下,虽然将值放在最后一行,但当值将空元素添加到数组顶部时,会出现值没有放在正确位置的情况。

在我的环境中,我以前在这种情况下感到困惑。所以我想了个办法解决了我的问题。在这个解决方案中, AppendCellsRequest 属于 spreadsheets.batchUpdate 使用。我认为你的情况可能会有一些解决办法,所以请把这看作是其中之一。

修改脚本:

请更新脚本(之后 service = build('sheets', 'v4', http=creds.authorize(Http())) )到以下行:

spreadsheet_id = "#####"  # Please set spreadsheet ID here.
sheetId = 0  # Please set sheet ID here.
values = [[max_temp, avg_temp, min_temp]]
range_list = [1, 4, 7]  # columns B, E and H. First index is 0.
rows = [{'values': ([{}] * e) + [{'userEnteredValue': {'stringValue': r}} for r in values[0]]} for e in range_list]
body = {'requests': [{'appendCells': {'rows': rows, 'sheetId': 0, 'fields': "userEnteredValue.stringValue"}}]}
result = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body).execute()

注:

  • 这个修改过的脚本假定您的环境可以使用sheets api。
  • 使用此脚本时,请将工作表ID设置为 Sheet1 并将值设置为 max_temp, avg_temp, min_temp 是的。
  • range_list = [1, 4, 7] 表示B、E和H列。在本例中,第一个索引为0。
  • 在这个修改过的脚本中,所有 range_list 作为请求主体创建并使用。这样,一个api调用就可以放入值。所以 for i in range(3) 在你的问题可以删除。
  • 这是一个示例修改。所以请根据你的情况修改一下。

参考文献:

如果我误解了你的问题,我很抱歉。