代码之家  ›  专栏  ›  技术社区  ›  axelra82

无法在添加新格式之前删除条件格式

  •  0
  • axelra82  · 技术社区  · 6 年前

    为了确保不反复添加相同的规则,我首先尝试清除正在处理的列(即索引6)上的任何条件格式。但是当我这么做的时候,我总是得到一个错误:

    Invalid requests[0].deleteConditionalFormatRule: No conditional format on sheet: [THE_SHEET_ID] at index: 6
    

    说那张纸上没有条件格式(这是不正确的)。

    我的应用程序脚本代码的相关片段:

      ...
      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 请求时,一切正常,但这显然没有清除现有的条件格式。

    我错过了什么?另外,是否有某种方式可以只有条件地添加格式,即只在格式不存在时添加格式?

    *编辑

    {
     "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。。。这是在谷歌应用程序脚本,所以控制台日志不存在这里。有一个“Logger”,但并不确定您还需要从请求中获得什么(在“clearRedWarning”var中有明文说明(即请求是如何形成的)。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Community CDub    5 年前

    指数

    要删除的规则的从零开始的索引。

    它不是列索引。这是规则的索引。 0 1 将是下一个最高的,以此类推。您的索引请求 6 仅当存在7个条件格式规则时,才有效。

    您也可以尝试分别发出这两个请求。不管第一个请求是否出错(如果没有规则) ),您可以使用发出第二个请求 finally .

    参考文献: