Python/gspread - 根据另一个单元格的内容更改一个单元格的内容

Python/gspread - Changing contents of a cell based on contents of another cell

我刚开始使用 Python (v3.8) 并尝试将其应用到工作中的实际项目中。我使用了 Google 工作表 API 的视频教程,并且能够使用它来操作单元格数据。现在,我正尝试使用视频中介绍的语法以这种方式操作单元格内容,但我遇到了麻烦:

假设我有 20 行 + 10 列数据 - 日期、简短评论等。它应该检查 H 列每一行中的特定字符串 ("Sales"),然后根据是否未找到该字符串,请在末尾(同一行)的空白列中输入 "Yes" 或 "No",例如 J.

pip install gspread oauth2client
import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]

creds = ServiceAccountCredentials.from_json_keyfile_name("this_file.json", scope)

client = gspread.authorize(creds)

sheet = client.open("Spreadsheet1").sheet1

data = sheet.get_all_records()

column_H = sheet.range(8)
for p in column_H:
    if "Sales" in cell.value:
        sheet.update_cell("Yes")  #I'd like it to update the cell 2 rows to the right (column J)
    else:
        sheet.update_cell("No")

这就是我目前所知道的。如您所见,其中没有任何内容告诉它更新同一行中对应的列 J 单元格。这里可能还有其他问题。就像我说的,才刚刚开始。

编辑:解决方案(概念上)可以是...

    if "Sales" in cell.value:
        cell.value + 2 = "Yes"  #+2 to denote updating value of cell two to the right, rather than the cell it's evaluating
    else:
        cell.value + 2 = "No"

只是在这里吐口水。

  • 当列 "H" 的值为 "Sales" 时,您想将 "Yes" 的值放入列 "J" 中。
  • 当列 "H" 没有 "Sales".
  • 的值时,您想将 "No" 的值放入列 "J"
  • 您想使用带有 python 的 gspread 来实现此目的。
  • 您已经能够使用 Sheets API.API.
  • 获取和放置 Google 电子表格的值

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

修改点:

  • 在此修改中,首先从列 "H" 中检索值。在检查 "Sales" 的值以获取检索值后,将结果值放入列 "J".

修改后的脚本:

请按如下方式修改您的脚本。

从:
data = sheet.get_all_records()

column_H = sheet.range(8)
for p in column_H:
    if "Sales" in cell.value:
        sheet.update_cell("Yes")  #I'd like it to update the cell 2 rows to the right (column J)
    else:
        sheet.update_cell("No")
到:
data = sheet.get_all_values()
values = ["Yes" if e[7] == "Sales" else "No" for e in data]
cells = sheet.range("J1:J%d" % len(values))
for i, e in enumerate(cells):
    e.value = values[i]
sheet.update_cells(cells)

注:

  • 如果不想放"No",请修改为values = ["Yes" if e == "Sales" else "No" for e in data]

参考文献: