使用 google 电子表格 API 仅删除单元格范围选择的格式
Posted
技术标签:
【中文标题】使用 google 电子表格 API 仅删除单元格范围选择的格式【英文标题】:Remove only formatting on a cell range selection with google spreadsheet API 【发布时间】:2018-01-29 18:38:24 【问题描述】:我正在寻找一种方法,使用带有 python 的 Google sheet API 仅删除单元格范围选择的格式,而不是其内容。
目前,我唯一的解决方案是应用与普通格式相同的逻辑并将样式设置为 NONE。例如,当我将边框格式设置为特定范围时,我使用:
request_dict = 'requests': [
"updateBorders":
"range":
"sheetId": sheetId,
"startRowIndex": 1,
"endRowIndex": raws,
"startColumnIndex": first_col,
"endColumnIndex": last_col,
"top":
"style": "SOLID_MEDIUM",
"width": 1,
"color": "blue": 0,
"bottom":
"style": "SOLID_MEDIUM",
"width": 1,
"color": "blue": 0,
"left":
"style": "SOLID_MEDIUM",
"width": 1,
"color": "blue": 0,
"right":
"style": "SOLID_MEDIUM",
"width": 1,
"color": "blue": 0,
"innerHorizontal":
"style": "SOLID_MEDIUM",
"width": 1,
"color": "blue": 0,
"innerVertical":
"style": "SOLID_MEDIUM",
"width": 1,
"color": "blue": 0]
body = 'requests': request_dict['requests']
service.spreadsheets().batchUpdate(spreadsheetId=spreadsheetId,
body=body).execute()
如果我想删除它,我将“样式”字段替换为“NONE”,如下所示:
request_dict = 'requests': [
"updateBorders":
"range":
"sheetId": sheetId,
"startRowIndex": 1,
"endRowIndex": raws,
"startColumnIndex": first_col,
"endColumnIndex": last_col,
"top":
"style": "NONE",
"width": 1,
"color": "blue": 0,
"bottom":
"style": "NONE",
"width": 1,
"color": "blue": 0,
"left":
"style": "NONE",
"width": 1,
"color": "blue": 0,
"right":
"style": "NONE",
"width": 1,
"color": "blue": 0,
"innerHorizontal":
"style": "NONE",
"width": 1,
"color": "blue": 0,
"innerVertical":
"style": "NONE",
"width": 1,
"color": "blue": 0]
body = 'requests': request_dict['requests']
service.spreadsheets().batchUpdate(spreadsheetId=spreadsheetId,
body=body).execute()
但这意味着我需要为我定义的每种格式定义一个擦除格式的函数,这不是很实用... 第一步是找到一种方法来擦除整个工作表上的格式,也许之后才能对我工作表中的特定范围执行此操作。
【问题讨论】:
我不知道......但也许你可以从一个已知的、未格式化的单元格中复制格式。 【参考方案1】:我知道这是旧的,可能指的是 v3,但我想我会添加对我有用的内容:
repeatCell:
range:
sheetId: sheetId,
startRowIndex: 0,
endRowIndex: <rows>,
startColumnIndex: 0,
endColumnIndex: <columns>
,
fields: "userEnteredFormat"
【讨论】:
【参考方案2】:有同样的问题并想通了。另一个答案很接近,但对于任何偶然发现这一点的人来说。在api samples 中,它们表明您可以使用updateCells 来清除采用gridRange 参数的格式。 gridRange 文档说
缺少索引表示该边的范围是无限的。
因此去掉所有索引以影响整个工作表。
清除整个工作表:
body =
"requests": [
"updateCells":
"range":
"sheetId": sheetId
,
"fields": "userEnteredFormat"
]
spreadsheet.batch_update(body)
清除范围:
body =
"requests": [
"updateCells":
"range":
"sheetId": sheetId,
"startRowIndex": 1,
"endRowIndex": raws,
"startColumnIndex": first_col,
"endColumnIndex": last_col
,
"fields": "userEnteredFormat"
]
spreadsheet.batch_update(body)
【讨论】:
【参考方案3】:This documentation 似乎声明如果您在updateCells
请求中将fields
设置为"userEnteredValue"
,它将删除所有格式。我还没有对此进行测试,但你去吧:
request_dict =
"requests": [
"updateCells":
"range":
"sheetId": sheetId,
"startRowIndex": 1,
"endRowIndex": raws,
"startColumnIndex": first_col,
"endColumnIndex": last_col
,
"fields": "userEnteredValue"
]
【讨论】:
我有一个编辑似乎表明userEnteredValue
应该是userEnteredFormat
而不是......这是有道理的,但我再次没有测试它。如果有人在这里测试它和 cmets,我会更新我的答案。
我为此使用fields: 'userEnteredFormat'
,但使用repeatCell
而不是updateCells
命令以上是关于使用 google 电子表格 API 仅删除单元格范围选择的格式的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 Google 电子表格 API 在单元格中添加评论?
Google 表格脚本 - 根据单元格作为今天的日期发送电子邮件