在API范围规范中定义整列

时间:2019-04-18 17:13:15

标签: google-apps-script google-sheets-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())
}

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

enter image description here

1 个答案:

答案 0 :(得分:1)

简单:要引用整个工作表,请不要提供任何索引规范。根据{{​​3}}和DimensionRange文档,缺少的索引表示无限制的规范。

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