Python gspread,如何填充 google sheet,列表中的字典

Python gspread, how to populate google sheet, dictionaries within list

我尝试查看类似问题的答案,但无法使代码正常工作。我无法理解如何在列表中填充相似词典的 gspread。

下面是我要导出的数据结构:

    sheet_data = [{
                "timestamp": "09-04-2019",
                "value": "10.0",
                "company_name": "Xbox",
                "product": "Buy"
                },
                {
                "timestamp": "09-03-2019",
                "value": "2.0",
                "company_name": "something",
                "product": "Sell"
        }]

以下是我已经尝试过并且现在可以使用的方法。我剩下的问题是,我正在手动输入 cell_range = worksheet.range('A2:D3'),我该怎么做才能将 sheet 更新为可用的任何单元格给定的数据。由于我在 sheet_data 中的数据量会在以后的更新中发生变化。


header = ['timestamp', 'value', 'company_name', 'product']
        worksheet.add_rows(len(sheet_data))
        cell_range = worksheet.range('A2:D3')
        flat_sheet_data = []
        for row in sheet_data:
            for column in header:
                flat_sheet_data.append(row[column])
        for i, cell in enumerate(cell_range):
            cell.value = flat_sheet_data[i]
        worksheet.update_cells(cell_range)

link 到我想在 spreedsheet 上使用上面的数据结构完成的图像:https://i.stack.imgur.com/EQLEI.png

  • 您想将 sheet_data 放入电子表格。
  • 您已经能够使用带有 gspread 的表格 API 获取和放置值。
  • 从你的headers图像中sheet_data、"Date"、"Company_Name"、"Traffic"和"Product"对应的是"timestamp"、"company_name"、"value" 和 "product"。

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

流量:

该示例脚本的流程如下。

  1. 准备header_to_key.
  2. 创建用于放入电子表格的列表。
  3. 使用values_append的方法放入创建的列表。

示例脚本:

在你运行脚本之前,请设置变量。

spreadsheetId = "###"  # Please set the Spreadsheet ID.
sheetName = "Sheet1"  # Please set the sheet name.

sheet_data = [{
    "timestamp": "09-04-2019",
    "value": "10.0",
    "company_name": "Xbox",
    "product": "Buy"
}, {
    "timestamp": "09-03-2019",
    "value": "2.0",
    "company_name": "something",
    "product": "Sell"
}]

header_to_key = {
    'Date': 'timestamp',
    'Company_Name': 'company_name',
    'Traffic': 'value',
    'Product': 'product'
}

client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(spreadsheetId)
worksheet = spreadsheet.worksheet(sheetName)

headers = worksheet.row_values(1)
put_values = []
for v in sheet_data:
    temp = []
    for h in headers:
        temp.append(v[header_to_key[h]])
    put_values.append(temp)
spreadsheet.values_append(sheetName, {'valueInputOption': 'USER_ENTERED'}, {'values': put_values})

注:

  • 在此示例脚本中,假设 "Date"、"Company_Name"、"Traffic" 和 "Product" 的 headers 设置为电子表格,如您的图片。

参考:

下面的方法对我有用

gc = gspread.authorize(credentials)
sh = gc.open_by_url("url of the sheet")
ws = sh.worksheet(ws_title)
records = json.loads(sheet_data)
keys = [str(eachvalue) for eachvalue in records.keys()]
values = [str(eachvalue) for eachvalue in records.values()]
Data =[{'range': 'A1:D1','values': [keys],}, {'range': 'A2:D2','values': [values],}]
ws.batch_update(Data);