【问题标题】:Unable to delete conditional formatting prior to adding new formatting在添加新格式之前无法删除条件格式
【发布时间】:2018-10-10 06:06:19
【问题描述】:

为确保我不会一遍又一遍地添加相同的规则,我首先尝试清除我正在使用的列(即索引 6)上的所有条件格式。但是当我这样做时,我不断收到错误:

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

说该工作表上没有条件格式(这是不正确的)。

我的Apps Script代码的相关sn-p:

  ...
  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 资源管理器中的 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”变量中以明文形式显示(即如何制定请求)。

【问题讨论】:

  • 那么,在您执行此操作之前,适当的spreadsheets.get 会为文件显示什么?
  • 显示条件格式。就像我说的,它在那里......所以我不明白为什么批量更新说它不是?另外,如果该索引上没有任何格式,它会抛出这个错误吗?在那种情况下,我将如何做一个条件 if 语句,如果没有任何格式,则只应用格式?
  • console sends the logs to Stackdriver. View -> Stackdriver logs. 每个spreadsheetId 的SheetId 都是唯一的,因此在相关的JSON 摘要中包含sheetId 将有助于我们所有人确定您是否在删除请求中引用了错误的工作表。跨度>
  • 嗯,有趣的@I'-'I 那,至少删除了那里的错误:) 但是,现在根本没有条件格式......我怎样才能在 GAS 中获得当前的条件格式一个特定的表?有了这个,我也许可以只做一个 IF 语句,并且只在必要时应用它
  • @tehhowch 我明白了。但是,sheetId 作为变量传递给执行条件格式的函数,因此它不可能是不正确的,因为它可以很好地添加条件格式。问题不可能与Sheed ID“错字”有关。然而,索引,由我指出'-'我可能实际上是什么。我会调查的。再次感谢你们的患者(和帮助!),GAS 我对我来说是新手 :)

标签: google-apps-script google-sheets-api gs-conditional-formatting


【解决方案1】:

索引

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

这不是列索引。这是规则的索引。 0 将是最高优先级规则。 1 将是第二高的,依此类推。您对索引 6 的请求是有效的,前提是存在 7 个条件格式规则。

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

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多