Определить весь столбец в спецификации диапазона API - PullRequest
0 голосов
/ 18 апреля 2019

Я могу использовать приведенный ниже синтаксис для ссылки на весь столбец 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 Ответ

1 голос
/ 19 апреля 2019

Простой: чтобы ссылаться на весь лист, не предоставляйте никаких характеристик индекса.Согласно документации DimensionRange и GridRange, отсутствующие индексы указывают на неограниченную спецификацию.

const theWholeSheet = {
  sheetId: sheet.getSheetId()
};
const noFirstRowOrFirstCol = {
  sheetId: sheet.getSheetId(),
  startColumnIndex: 1,
  startRowIndex: 1
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...