Python googleapiclient用背景颜色附加行

时间:2019-10-16 09:47:05

标签: python google-sheets-api

我正在尝试在设置背景色时在Google工作表中插入一行。

我已经将附加到新行的工作正常。从我在文档中可以看到的背景色设置为RGB字典,但是我找不到任何文件可以在官方API中执行此操作。我已经在append调用中尝试过,但这似乎不起作用。

似乎应该在body dict中,但是我在那里尝试了变体,并且得到TypeError响应。

range_notation = "Sheet1"
    body = {
        'values': [
            row
        ],
        'backgroundColor' : {'red': 1, 'green': 0, 'blue': 100}
    }

    result = sheet.values().append(spreadsheetId=spreadsheet_id,
                                   range=range_notation,
                                   body=body,
                                   valueInputOption="RAW",
                                   insert

尝试了类似的变体

body = {
        'values': [
            {
                'userEnteredValue': row,
                'userEnteredFormat': {
                    'backgroundColor': {'red': 100, 'green': 0, 'blue': 0},
                },
            },
        ],

    }

但是它从库中获取HttpError。

1 个答案:

答案 0 :(得分:2)

  • 您要通过放置值来附加一行。
  • 您要更改附加行的背景颜色。
  • 您要使用带有python的google-api-python-client来实现此目的。
  • 您已经被放置并使用Sheets API获取电子表格的值。

如果我的理解是正确的,那么该示例脚本如何?

修改点:

  • 为了附加值并更改背景颜色,使用了Sheets API中的电子表格.batchUpdate方法。

模式1:

在此模式中,将'sample1','sample2','sample3'的值作为一行附加到表中,并修改这些单元格的背景色。

示例脚本:

spreadsheet_id = '###' # Please set Spreadsheet ID
sheetId = 0 # Please set sheet ID. For example, the 1st sheet ID of the default Spreadsheet is 0.
row = ['sample1', 'sample2', 'sample3'] # Please set the values.

values = [{'userEnteredFormat': {'backgroundColor': {'red': 1, 'green': 0, 'blue': 100}}, 'userEnteredValue': {'stringValue': col}} for col in row]
requests = {'requests': [{'appendCells': {'rows': [{'values': values}], 'fields': 'userEnteredFormat.backgroundColor,userEnteredValue', 'sheetId': sheetId}}]}
response = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=requests).execute()
print(response)

模式2:

在此模式中,将'sample1','sample2','sample3'的值作为一行附加到表中,并修改该行的背景色。

示例脚本:

spreadsheet_id = '###' # Please set Spreadsheet ID
sheetId = 0 # Please set sheet ID. For example, the 1st sheet ID of the default Spreadsheet is 0.
row = ['sample1', 'sample2', 'sample3'] # Please set the values.

ss = service.spreadsheets().get(spreadsheetId=spreadsheet_id).execute()
for sheet in ss['sheets']:
    if sheet['properties']['sheetId'] == sheetId:
        row.extend([''] * (sheet['properties']['gridProperties']['columnCount'] - len(row)))
        break
values = [{'userEnteredFormat': {'backgroundColor': {'red': 1, 'green': 0, 'blue': 100}}, 'userEnteredValue': {'stringValue': col}} for col in row]
requests = {'requests': [{'appendCells': {'rows': [{'values': values}], 'fields': 'userEnteredFormat.backgroundColor,userEnteredValue', 'sheetId': sheetId}}]}
response = service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=requests).execute()
print(response)

参考:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。