首页 > 解决方案 > 在 API 范围规范中定义整列

问题描述

我可以使用以下语法来引用整个 A、B 和 C 列:

A1:C

下面的脚本将引用完整的可用单元格!

  var myRange = {
    'sheetId': sheet.getSheetId(),
    'startRowIndex': 0,
    'endRowIndex': sheet.getLastRow(),
    'startColumnIndex': 0,
    'endColumnIndex': sheet.getLastColumn()
  }

如果用户插入一个新行,这个范围将不会覆盖它。如何更改它以支持整个列A1:C

完整脚本如下:

function addConditonalFormat() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getActiveSheet()
  sheet.clearConditionalFormatRules()
  var colorMerged = {'red': 222/255, 'green': 235/255, 'blue': 246/255, 'alpha': 0.7}
  var colorSkipped = {'red': 222/255, 'green': 235/255, 'blue': 0, 'alpha': 0.7}
  var myRange = {
    'sheetId': sheet.getSheetId(),
    'startRowIndex': 0,
    'endRowIndex': sheet.getLastRow(),
    'startColumnIndex': 0,
    'endColumnIndex': sheet.getLastColumn()
  }

  var config = [["merged",colorMerged],["skipped",colorSkipped]]
  var requests = []
  for (var i=0;i<config.length;i++)  {
    var row = config[i]
    var keyword = row[0]
    var color = row[1]
    Logger.log(keyword + ":" + color)
    var cond = {'addConditionalFormatRule': {
      'index': 0,
      'rule': {
      'ranges': [ myRange ],
        'booleanRule': {
          'format': {'backgroundColor': color},
          'condition': {
            'type': 'CUSTOM_FORMULA',
            'values':[{'userEnteredValue': '=$A:$A="' + keyword + '"'}]},},},}         }
    requests.push(cond)
  }  
  var format_req = {
    'requests': requests,
    'includeSpreadsheetInResponse': false,
  }
  Sheets.Spreadsheets.batchUpdate(JSON.stringify(format_req), ss.getId())
}

运行脚本后,在最后一行之后插入行,条件格式将不适用于新添加的行!

在此处输入图像描述

标签: google-apps-scriptgoogle-sheets-api

解决方案


简单:参考整张表,不提供任何索引规格。根据DimensionRangeGridRange文档,缺少索引表示无界规范。

const theWholeSheet = {
  sheetId: sheet.getSheetId()
};
const noFirstRowOrFirstCol = {
  sheetId: sheet.getSheetId(),
  startColumnIndex: 1,
  startRowIndex: 1
};

推荐阅读