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

时间:2019-12-10 17:49:34

标签: python google-sheets google-sheets-api gspread

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

假设我有20行+ 10列数据-日期,简短注释等。它应在H列的每一行中检查特定的字符串(“销售”),然后根据该字符串是否找到后,在末尾(同一行)的空白列(例如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"

只是在这里吐痰。

1 个答案:

答案 0 :(得分:0)

  • 当列“ H”的值为“ Sales”时,要将“是”的值放入列“ J”。
  • 当列“ H”的值为“ Sales”时,要将“否”的值添加到“ J”列。
  • 您想通过gspread和python实现此目的。
  • 您已经可以使用Sheets API获取和放置Google Spreadsheet的值。

如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。

修改点:

  • 在此修改中,首先,从“ H”列中检索值。在检查“销售”的值以获取检索到的值之后,结果值将放入“ 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)

注意:

  • 如果您不想输入“否”,请修改为values = ["Yes" if e == "Sales" else "No" for e in data]

参考文献: