Скрипт листа Google Отметьте только последнюю соответствующую строку - PullRequest
0 голосов
/ 07 марта 2020

Привет всем, я хочу изменить этот скрипт, чтобы отметить только последний экземпляр значения поиска. Эта проверка скрипта помечает все строки, которые соответствуют значению поиска из E2. Я хотел бы, чтобы он отмечал только последнюю найденную строку, которая соответствует значению поиска в E2.

enter image description here

Вот код

  function check(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var check = sheet.getRange("E2").getValue();
  for(var i = 0; i<data.length;i++){
  if(data[i][0] == check){ 

  var row = (i+1)
  // Logger.log(row)
  sheet.getRange('B'+row).setValue(true)
  sheet.getRange('C'+row).setValue(true)
  sheet.getRange('D'+row).setValue(true)

  }
 }
}

Вот ссылка на мой лист Google https://docs.google.com/spreadsheets/d/17qAzjYxS3Myj4AHTRTyjHjSpiiKak-DSsYt8Aa9msbE/edit?usp=sharing

Я также не уверен, является ли это самым быстрым способом поиска значения, так как в моих реальных данных много строк лист Спасибо

1 Ответ

2 голосов
/ 07 марта 2020
  • Вы хотите установить флажки в столбцах «B» - «D», когда значение столбца «E2» найдено в столбце «A».
    • Из вашего скрипта я подумал вот так.
  • Вы хотите отметить только флажки столбцов "B" - "D" последней найденной строки.
  • Вы хотите запустить скрипт, нажав кнопку.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Шаблон 1:

В этом шаблоне ваш сценарий изменен. В этом случае, пожалуйста, используйте реверс для l oop. И когда значение будет найдено, сломайте l oop.

Модифицированный скрипт:

function check(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var check = sheet.getRange("E2").getValue();
  for(var i = data.length - 1; i >= 0; i--){  // Modified
    if(data[i][0] == check){ 
      var row = (i+1)
      sheet.getRange('B'+row).setValue(true);
      sheet.getRange('C'+row).setValue(true);
      sheet.getRange('D'+row).setValue(true);
      break;  // Added
    }
  }
}

Шаблон 2:

В этом шаблоне используется TextFinder.

Модифицированный скрипт:

function check(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var check = sheet.getRange("E2").getValue();

  sheet.getRange(2, 1, sheet.getLastRow() - 1, 1)
    .createTextFinder(check)
    .findAll()
    .pop()
    .offset(0, 1, 1, 3)
    .check();
}
  • В этом случае sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).createTextFinder(check).findAll().pop() возвращает ячейку последней найденной строки. Поэтому для этого флажки столбцов «B» - «D» проверяются с использованием offset(0, 1, 1, 3) и check().
  • Если вы хотите проверить только столбец «B», пожалуйста, измените offset(0, 1, 1, 3) offset(0, 1, 1, 1)

Ссылки:

Если я неправильно понял ваш вопрос и это Я не извиняюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...