google-apps-script - 在添加新格式之前无法删除条件格式
问题描述
为了确保我不会一遍又一遍地添加相同的规则,我首先尝试清除我正在使用的列(即索引 6)上的任何条件格式。但是当我这样做时,我不断收到错误:
Invalid requests[0].deleteConditionalFormatRule: No conditional format on sheet: [THE_SHEET_ID] at index: 6
说该工作表上没有条件格式(这是不正确的)。
我的 Apps 脚本代码的相关片段:
...
var redWarning = Sheets.newRequest();
var redWarningRequest = Sheets.newAddConditionalFormatRuleRequest();
redWarningRequest.rule = redWarningRule;
redWarningRequest.index = 6;
redWarning.addConditionalFormatRule = redWarningRequest;
var clearRedWarning = Sheets.newRequest();
var clearRedWarningRequest = Sheets.newDeleteConditionalFormatRuleRequest();
clearRedWarningRequest.sheetId = sheetID;
clearRedWarningRequest.index = 6;
clearRedWarning.deleteConditionalFormatRule = clearRedWarningRequest;
// Batch send requests
var requests = [clearRedWarning, redWarning];
var batchUpdate = Sheets.newBatchUpdateSpreadsheetRequest();
batchUpdate.requests = requests;
return Sheets.Spreadsheets.batchUpdate( batchUpdate, spreadsheetId );
如果我不包括clearRedWarning
请求,一切正常,但这显然不会清除现有的条件格式。
我在这里想念什么?此外,是否有某种方式只能有条件地添加格式,即只有在它不存在时才添加它?
*编辑 根据 tehhowch 的请求,这是 API Explorer 中的 JSON 响应(部分值已编辑):
{
"sheets": [
{
"properties": {
"sheetId": [REDACTED],
"title": "[REDACTED]"
},
"conditionalFormats": [
{
"ranges": [
{
"sheetId": [REDACTED],
"startRowIndex": 1,
"endRowIndex": 1000,
"startColumnIndex": 6,
"endColumnIndex": 7
}
],
"booleanRule": {
"condition": {
"type": "TEXT_CONTAINS",
"values": [
{
"userEnteredValue": "yes"
}
]
},
"format": {
"backgroundColor": {
"red": 1,
"green": 0.8,
"blue": 0.8
},
"textFormat": {
"foregroundColor": {
"red": 1,
"green": 0.2,
"blue": 0.2
},
"bold": true
}
}
}
}
]
}
]
}
关于发送的 JSON ......这是在 Google Apps 脚本中,所以控制台日志在这里不存在。有一个“记录器”,但不确定您还需要从请求中得到什么(它在上面的“clearRedWarning”变量中以明文形式显示(即请求是如何制定的)。
解决方案
指数
要删除的规则的从零开始的索引。
它不是列索引。这是规则的索引。0
将是最高优先级的规则。1
将是下一个最高的,依此类推。6
仅当存在 7 条条件格式规则时,您的索引请求才有效。
您也可以尝试分别发出这两个请求。无论第一个请求是否出错(如果 没有规则0
),您都可以使用 发出第二个请求finally
。
参考:
推荐阅读
- firebase - 如何在 TypeScript 数据模型中使用 FieldValue ServerTimestamp?
- azerothcore - Player:GetAccountId() 传递了一个表参数
- python - 将数组作为列附加到数据框(或根据其他数据框的日期创建新的数据框)
- python - 尝试遍历数据框行但仅访问列标题
- json - 将 JSON 值展平为键
- javascript - 如何获取另一个 HTML 页面的元素
- javascript - 嵌套反应路由器
- python - 如何过滤第一行(不是标题)以字符串开头的列
- amazon-web-services - DynamoDB 查询按名称排序的所有用户
- python - “IndexError: index 20 is out of bounds for axis 1 with size 20”是什么意思