Скрипт приложения Google для поиска значения только в определенном столбце

#google-apps-script

#google-apps-script

Вопрос:

Я нашел приведенный ниже скрипт из одного из сообщений Stackoverflow.. это почти соответствует моим требованиям, но мне нужно немного изменений… Нравится.. Я не хочу заменять, я только хочу, чтобы он находил мое значение в определенном столбце, а также хотел, чтобы он переходил в эту ячейку, когда находит значение. Может кто-нибудь мне помочь?

также.. Я хочу, чтобы для запуска макроса использовалась комбинация клавиш … вместо Ctrl F.. Я хочу, чтобы он отображал запрос поиска, когда я нажимаю Ctrl F … возможно ли это??

 function findingReplacing()
{
  var s = SpreadsheetApp.getUi().prompt("Search String", "Please enter desired search string", SpreadsheetApp.getUi().ButtonSet.OK).getResponseText();
  var rng = SpreadsheetApp.getActiveSheet().getRange('D:D');
  var rngA = rng.getValues();
  for(var i=1;i<rngA.length;i  )
  {
    if(rngA[i][0]==s)
    {
      rngA
 

Комментарии:

1. Используйте поиск текста. Google или поиск здесь для соответствующих сообщений.

Ответ №1:

Как упоминалось @Marios, самый простой способ — использовать TextFinder в выбранном вами диапазоне.

Вот пример кода:

 function findingAndSelect()
{
  var s = SpreadsheetApp.getUi().prompt("Search String", "Please enter desired search string",      SpreadsheetApp.getUi().ButtonSet.OK).getResponseText();
  var rng = SpreadsheetApp.getActiveSheet().getActiveRange();
  Logger.log(s);
  // Creates  a text finder for the range.
  var textFinder = rng.createTextFinder(s);
  textFinder.matchEntireCell(true);
  textFinder.matchCase(false);

  // Returns the first occurrence of the string.
  var result = textFinder.findAll();
  if (result.length == 0){
    /* string not found */
    SpreadsheetApp.getUi().alert("Search String", "String not found",SpreadsheetApp.getUi().ButtonSet.OK);
  }else{
    result.forEach((range) => { range.setBackground('#d5f5df');});
  }

}
 

Как использовать?

  1. Выберите весь столбец, в котором вы хотите выполнить поиск.
  2. Введите строку для поиска.
  3. Нажмите OK.

Что он делает?

  1. Попросите строку для поиска.
  2. Получите активный диапазон / выбранный диапазон, где искать строку (в вашем случае должен быть выбран весь столбец).
  3. Создайте средство поиска текста и найдите входную строку.
  4. Проверьте, была ли найдена строка. Затем измените цвет фона всех диапазонов, в которых была найдена строка

Дополнительная информация:

Вы также можете указать желаемые параметры поиска в текстовом поисковике. Пожалуйста, проверьте TextFinder, чтобы увидеть доступные методы.

Если вы хотите сопоставить строку со всей ячейкой, вы можете использовать matchEntireCell() и установить значение true .

 // Match the entire content of a cell.
textFinder.matchEntireCell(true);
 

Если вы хотите сопоставить строку на основе ее регистра, вы можете использовать MatchCase() и установить значение true .

 // Match the search text's case exactly
textFinder.matchCase(true);
 

Вывод:

введите описание изображения здесь


Импорт функций в виде макросов

  1. В пользовательском интерфейсе Google Sheets выберите Сервис> Макросы> Импорт.
  2. Выберите функцию из представленного списка и нажмите Добавить функцию.
  3. Выберите очистить, чтобы закрыть диалоговое окно.
  4. Выберите Сервис> Макросы> Управление макросами.
  5. Найдите только что импортированную функцию в списке. Назначьте макро-макро уникальное сочетание клавиш. Вы также можете изменить имя макроса здесь; имя по умолчанию соответствует имени функции.
  6. Нажмите Обновить, чтобы сохранить конфигурацию макроса.

Примечание: вы можете связать макрос с сочетанием клавиш в форме Ctrl Alt Shift Number

Комментарии:

1. Привет, Рон, еще одна вещь… он находит первое вхождение, но в моем столбце у меня повторяющиеся значения.. и я хочу, чтобы он переносил его в каждую ячейку, где находится значение .. в этом случае .. как мне настроить код?

2. Это невозможно для textFinder . Когда функция скрипта приложений была выполнена успешно, она очистит все данные на основе областей. Я попытался проверить Apps Script CacheService , но он может сохранять только строковое значение в кэше. Изначально я планировал создать другую функцию для вызова textFinder.findNext() после успешного сохранения textFinder в кэше из findingAndSelect() .

3. Один из способов, который я мог бы предложить, — изменить цвет фона всех соответствующих ячеек при вызове findingAndSelect() . Если вас это устроит, вам просто нужно выполнить цикл textFinder.findNext() и изменять каждую ячейку, пока она не вернет значение null

4. Привет, Рон, как я уже упоминал ранее.. Я не очень хорошо разбираюсь в Appscript… Я согласен с обходным путем, не могли бы вы помочь добавить этот код в приведенный выше пример кода?

5. Я не уверен, почему вы предпочитаете создавать такую функцию вместо того, чтобы просто использовать CTRL F для поиска строки, но если вы настаиваете, пожалуйста, обратитесь к обновленному ответу