Написание скрипта в Google Таблицах для поиска строки в столбце на листе и переноса информации из этой строки в строки на другом листе

#google-apps-script #google-sheets #scripting

Вопрос:

Я пытаюсь перенести информацию с одного листа на другой на основе имен сотрудников из центральной базы данных.

Я попытаюсь объяснить проблему здесь с помощью фотографий, и я свяжу листы внизу.

«Именной лист 1» содержит список имен сотрудников, а также то, что они ели сегодня на завтрак, сегодня на обед, любимую еду, любимую газировку, любимый цвет и любимое животное.

Именной лист 1

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

Имена были внесены в «Именной лист 1» на основе даты их присоединения к компании. «Именной лист 2» Содержит ту же информацию, однако имена теперь вводятся в зависимости от их возраста, поэтому имена расположены в другом порядке.

Именной лист 2

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

Столбцы B и C обновляются автоматически каждый день из другой базы данных, но столбцы A, D-G не меняются. Вся информация листа в столбцах A-C перезаписывается каждый день, однако они всегда будут в одном и том же порядке, поэтому D-G не обновляйте, так как они не изменятся, если сотрудник не будет добавлен/ удален, что будет сделано вручную.

Теперь, когда мы переходим к «Именному листу 2», я пытаюсь переместить все данные из «Именного листа 1» на этот новый лист.

Я пытаюсь написать сценарий, который будет искать имя сотрудника в «Именном листе 2», копировать данные для столбцов D-G для этого сотрудника в «Именном листе 1» и вставлять эту информацию в столбцы D-G для этого сотрудника в «Именном листе 2»

Например, В «Именном листе 1» мы видим, что Боб-это строка 2, но строка 4 в «Именном листе 2». Этот скрипт найдет Боба в «Листе имени 1», Скопирует D2:G2, затем найдет столбец A в «Листе имени 2» для «Боба», и когда он найдет «Боб» в формате А4, он вставит его в D4.

Мне удалось найти сценарии, которые могут выполнять поиск на листе и печатать информацию на другом листе, однако я не нашел ни одного для поиска на этом втором листе и копирования/вставки определенной информации. Вот код для этой функции поиска

 var SPREADSHEET_NAME = "Name Sheet1";
var SEARCH_COL_IDX = 1;
var RETURN_COL_IDX = 0;

function searchStr(str) {
  var values = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SPREADSHEET_NAME).getDataRange().getValues();
  for (var i = 0; i < values.length; i  ) {
var row = values[i];
if (row[SEARCH_COL_IDX] == str) {
  return row[RETURN_COL_IDX];
    }
  }
}
 

Именной лист 2: https://docs.google.com/spreadsheets/d/1j6wt-ZDwnuXUf6Z3alyjUInuV2PHTdOweGf2L_JkxJ8/edit?usp=sharing

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

1. Какой сценарий вы пытались написать, который не сработал?

2. Привет, Дмитрий, До сих пор я делал скрипт только для поиска по первому листу/столбцу и получения информации из строки, но не смог найти, как выполнить поиск по второму листу, а затем вставить. var SPREADSHEET_NAME = "Name Sheet1"; var SEARCH_COL_IDX = 1; var RETURN_COL_IDX = 0; function searchStr(str) { var values = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(SPREADSHEET_NAME).getDataRange().getValues(); for (var i = 0; i < values.length; i ) { var row = values[i]; if (row[SEARCH_COL_IDX] == str) { return row[RETURN_COL_IDX]; } } }

Ответ №1:

 function copyDG() {
  const ss = SpreadsheetApp.getActive();
  const sh1 = ss.getSheetByName('Names Sheet 1');
  const rg1 = sh1.getRange(2,1,sh1.getLastRow() - 1);
  const vs1 = rg1.getDisplayValues();
  const sh2 = ss.getSheetByName('Names Sheet 2');
  const rg2 = sh2.getRange(2,1,sh2.getLastRow() - 1);
  const vs2 = rg2.getDisplayValues().flat();
  vs1.forEach((r,i) => {
    let idx = vs2.indexOf(r[0]);
    if(~idx) {
      sh1.getRange(i 2,4,1,4).copyTo(sh2.getRange(idx   2,4));
    }
  });
}
 

Ответ №2:

Вы можете легко сделать это с помощью операторов VLOOKUP в ячейках, и не обязательно с помощью сценария. Формула VLOOKUP получит строку поиска (имя) из столбца A текущего листа, затем перейдет на лист 1 и найдет эту строку, а затем получит значение из соответствующего столбца.

Например, добавление формулы VLOOKUP в ячейку D2 (Любимая еда, для Грега) —
Формула будет ссылаться на строку поиска Грега ($A2) , будет искать Лист1 для этой строки (Лист1!$A:$G), вернет значение этой строки в столбце D (4), а затем установит флаг «is_sorted» (обычно устанавливается значение false):

Пример ячейки данных Google Листов D2

Ту же формулу можно использовать для столбцов E,F,G, заменив 4 на 5, 6 или 7 в зависимости от того, из какого столбца его извлекать.

(Вы, конечно, могли бы также использовать одну и ту же формулу для всех столбцов B-G, а не только для D-G. )

Пример формулы в ячейке G5: Пример ячейки данных Google Sheets G5

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

1. ОП, вероятно, включил бы тег Google-Формулы, если бы это было то, что им нужно.