如何使用 gspread 将行追加到特定列?

问题描述 投票:0回答:1

我有一张谷歌表格,上面有值。可以这样想:

标题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
python google-sheets google-sheets-api gspread
1个回答
0
投票

根据您的情况,以下示例脚本怎么样?

示例脚本:

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")
  • 在这种情况下,通过一次 API 调用将值放入单元格中。

测试:

当此脚本运行到您的显示表时,将获得以下结果。

© www.soinside.com 2019 - 2024. All rights reserved.