将背景颜色添加到单元格 Google 工作表(python)
Posted
技术标签:
【中文标题】将背景颜色添加到单元格 Google 工作表(python)【英文标题】:Add background color to cell Google sheet (python) 【发布时间】:2020-10-19 06:47:56 【问题描述】:与这个问题(Update Google spreadsheet cell (python))相关,我想知道如何更改链接示例中单元格(或整行)的背景颜色。
这是我更新工作表的代码部分。我通过服务和行。当我只在一个带有 'values' 变量的单元格中写 'OK' 时,它起作用了,而不是对行背景的修改:
SPREADSHEET_ID = '###'
WORKSHEET_NAME = 'Name of the sheet'
async def escribirEnSheet(service, row):
# print('voy a escribir en celda ' + str(range_))
# range_ = 'M'+str(row) # TODO: Update placeholder value.
row += 1
range_ = WORKSHEET_NAME + "!M" + str(row)
print('voy a escribir en celda: ' + str(range_))
#values = [['OK']]
sheetObj = service.spreadsheets().get(spreadsheetId=SPREADSHEET_ID, fields='sheets(properties(sheetId,title))').execute()
sheet_id = ""
for sheet in sheetObj['sheets']:
if sheet['properties']['title'] == WORKSHEET_NAME:
sheet_id = sheet['properties']['sheetId']
break
batch_update_spreadsheet_request_body =
"requests": [
"updateCells":
"range":
"sheetId": sheet_id,
"startRowIndex": row,
"endRowIndex": row+1,
"startColumnIndex": 12,
"endColumnIndex": 12
,
"rows": [
"values": [
"userEnteredValue":
"stringValue": "OK"
]
],
"fields": "userEnteredValue"
,
"repeatCell":
"range":
"sheetId": WORKSHEET_NAME,
"startRowIndex": row,
"endRowIndex": row+1,
"startColumnIndex": 0,
,
"cell":
"userEnteredFormat":
"backgroundColor":
"red": 0,
"green": 1,
"blue": 0
,
"fields": "userEnteredFormat.backgroundColor"
]
value_input_option = 'RAW' # TODO: Update placeholder value.
try:
print('voy a hacer la request para escribir')
request = service.spreadsheets().batchUpdate(spreadsheetId=SPREADSHEET_ID, body=batch_update_spreadsheet_request_body)
response = request.execute()
time.sleep(1)
print('ya he escrito')
print(response)
except:
print('algo ha ocurrido al escribir en la sheet')
traceback.print_exc()
pass
提前致谢!
【问题讨论】:
【参考方案1】:我相信你的目标如下。
您想使用 googleapis 和 python 修改单元格或行的背景颜色。对于这个,这个答案怎么样?在这个答案中,使用了 Sheets API 中的“spreadsheets.batchUpdate”方法。在 batchUpdate 方法中,GridRange 用作范围。 Ref
模式一:
在这种模式中,单元格的背景颜色会被修改。
示例脚本:
在此示例脚本中,sheet_id
工作表的单元格“A1”的背景颜色被修改为红色。
SPREADSHEET_ID = '###' # Please set the Spreadsheet ID.
sheet_id = '###' # Please set the sheet ID.
service = build('sheets', 'v4', credentials=creds)
batch_update_spreadsheet_request_body =
"requests": [
"repeatCell":
"range":
"sheetId": sheet_id,
"startRowIndex": 0,
"endRowIndex": 1,
"startColumnIndex": 0,
"endColumnIndex": 1
,
"cell":
"userEnteredFormat":
"backgroundColor":
"red": 1,
"green": 0,
"blue": 0
,
"fields": "userEnteredFormat.backgroundColor"
]
request = service.spreadsheets().batchUpdate(spreadsheetId=SPREADSHEET_ID, body=batch_update_spreadsheet_request_body)
res = request.execute()
模式 2:
在这个模式中,一行的背景颜色被修改了。
示例脚本:
在此示例脚本中,sheet_id
工作表第一行的背景颜色被修改为红色。
SPREADSHEET_ID = '###' # Please set the Spreadsheet ID.
sheet_id = '###' # Please set the sheet ID.
service = build('sheets', 'v4', credentials=creds)
batch_update_spreadsheet_request_body =
"requests": [
"repeatCell":
"range":
"sheetId": sheet_id,
"startRowIndex": 0,
"endRowIndex": 1,
"startColumnIndex": 0,
,
"cell":
"userEnteredFormat":
"backgroundColor":
"red": 1,
"green": 0,
"blue": 0
,
"fields": "userEnteredFormat.backgroundColor"
]
request = service.spreadsheets().batchUpdate(spreadsheetId=SPREADSHEET_ID, body=batch_update_spreadsheet_request_body)
res = request.execute()
在这种情况下,endColumnIndex
已从模式 1 中删除。这样,就使用了一行。
参考资料:
Method: spreadsheets.batchUpdate RepeatCellRequest添加1:
当你想给一个单元格赋值并修改行的背景颜色时,下面的示例脚本怎么样?在这种情况下,将值的请求添加到批处理更新的请求中。
此外,您还想从工作表名称中检索工作表 ID。关于这一点,我添加了以下脚本。
示例脚本:
在此示例脚本中,将值“sample”放入单元格“A1”,并将第一行的背景颜色修改为红色。
SPREADSHEET_ID = '###' # Please set the Spreadsheet ID.
sheet_name = 'Sheet1' # Please set the sheet name.
service = build('sheets', 'v4', credentials=creds)
sheetObj = service.spreadsheets().get(spreadsheetId=SPREADSHEET_ID, fields='sheets(properties(sheetId,title))').execute()
sheet_id = ""
for sheet in sheetObj['sheets']:
if sheet['properties']['title'] == sheet_name:
sheet_id = sheet['properties']['sheetId']
break
batch_update_spreadsheet_request_body =
"requests": [
"updateCells":
"range":
"sheetId": sheet_id,
"startRowIndex": 0,
"endRowIndex": 1,
"startColumnIndex": 0,
"endColumnIndex": 1
,
"rows": [
"values": [
"userEnteredValue":
"stringValue": "sample"
]
],
"fields": "userEnteredValue"
,
"repeatCell":
"range":
"sheetId": sheet_id,
"startRowIndex": 0,
"endRowIndex": 1,
"startColumnIndex": 0,
,
"cell":
"userEnteredFormat":
"backgroundColor":
"red": 1,
"green": 0,
"blue": 0
,
"fields": "userEnteredFormat.backgroundColor"
]
request = service.spreadsheets().batchUpdate(spreadsheetId=SPREADSHEET_ID, body=batch_update_spreadsheet_request_body)
res = request.execute()
添加2:
您的脚本有几个修改点:
修改点:
updateCells
处,如果要将OK
的值放到“L”列,请修改如下。
来自
"startColumnIndex": 12,
"endColumnIndex": 12
到
"startColumnIndex": 11,
"endColumnIndex": 12
要放到“M”列时,请修改"startColumnIndex": 12,endColumnIndex": 13
。
在repeatCell
,WORKSHEET_NAME
用于工作表 ID。请修改为"sheetId": sheet_id,
。
【讨论】:
谢谢@Tanaike。如果我想在单个单元格中写入并更改整行的背景怎么办? @dtamab 感谢您的回复。对于您的额外要求,我又添加了一个示例脚本。你能确认一下吗?如果我误解了您的附加要求,我深表歉意。 我的 sheet_id 出现错误,我给出了工作表的名称,但它似乎必须是整数,对吗?是否可以传递名称而不是索引? @dtamab 感谢您的回复。我带来的不便表示歉意。我更新了用于从工作表名称中检索工作表 ID 的附加脚本。你能确认一下吗? 我收到此错误:googleapiclient.errors.HttpError:以上是关于将背景颜色添加到单元格 Google 工作表(python)的主要内容,如果未能解决你的问题,请参考以下文章
如何将添加到Google表格单元格中的图像保存到Google云端硬盘?
Python读取具有一些背景颜色的Excel工作表(xlsx)中的单元格