我有一张谷歌表格,上面有值。可以这样想:
标题1 | col1 | 标题 3 | col2 |
---|---|---|---|
第一 | 行 | ||
第二个 | 行 |
我将收到另一个数据,分别填充第二列和第四列。
所以我想使用带有特定列名称的append_row,因为在每个过程(我的代码)之后我想立即将其添加到我的谷歌工作表中。
我现在做什么(我想改变这个逻辑):
我有两列这样的。因此,在代码完成后(所有数据现已准备就绪),我之前所做的就是通过工作表更新添加这些数据,如下所示(我正在使用 gspread):
headers = worksheet.row_values(1)
col1_index = headers.index('col1') + 1
col2_index = headers.index('col2') + 1
for item in result:
col1_list.append(item['col1'])
col2_list.append(item['col2'])
col1_transposed = [[item] for item in col1_list]
col2_transposed = [[item] for item in col2_list]
col1_range = '{}2:{}{}'.format(chr(65 + col1_index - 1), chr(65 + col1_index - 1),
len(col1_list) + 1)
col2_range = '{}2:{}{}'.format(chr(65 + col2_index - 1), chr(65 + col2_index - 1),
len(col2_list) + 1)
worksheet.update(col1_range, col1_transposed)
worksheet.update(col2_range, col2_transposed)
但现在我想说,我想将数据逐行附加到特定列。每个过程之后我都会有这样的数据
{'col1': 'value1', 'col2': 'value2'}
value1 将位于第一行的 col1 列上,value2 将位于第一行的 col2 列上。
之后我将从代码中得到同样的东西:
{'col1': 'value3', 'col2': 'value4'}
我希望看到的结果:
标题1 | col1 | 标题 3 | col2 |
---|---|---|---|
第一 | 值1 | 行 | 值2 |
第二个 | 值3 | 行 | 值4 |
根据您的情况,以下示例脚本怎么样?
import gspread
client = # Please set your gspread client.
# This value is from your question.
inputValue = {'col1': 'value1', 'col2': 'value2'}
spreadsheetId = "###" # Please set your Spreadsheet ID.
sheetName = "Sheet1" # Please set your sheet name.
# Retrieve values from the worksheet.
spreadsheet = client.open_by_key(spreadsheetId)
worksheet = spreadsheet.worksheet(sheetName)
value = worksheet.get_all_values()
# Retrieve last rows of each column.
transpose = [list(c) for c in zip(*value)]
lastRows = {}
for i, r in enumerate(transpose):
temp = []
for j, c in enumerate(r[1:]):
if c != "":
temp.append(j)
lastRows[r[0]] = [2 if not temp else (temp[-1] + 3), i + 1]
# Create a request body.
body = [{"range": gspread.utils.rowcol_to_a1(*lastRows[k]), "values": [[v]]} for (k, v) in inputValue.items() if k in lastRows]
# Put values.
if body != []:
worksheet.batch_update(body, value_input_option="USER_ENTERED")
当此脚本运行到您的显示表时,将获得以下结果。