@Shakhinvd

Как автоматически переносить строки из общей базы данных (пополняется из Google Forms) на определенный лист, исходя из данных определенного столбца?

Привет! Есть форма, в которой один из вопросов "Округ или город". (H2) Ответы падают в общую базу. Как мне настроить автоматическое распределение строк из общей базы по листам в таблице по каждому округу?65132a3b2114e411839744.jpeg
  • Вопрос задан
  • 271 просмотр
Решения вопроса 2
oshliaer
@oshliaer Куратор тега Google Sheets
Google Products Expert
Вы может использовать формулы, например, FILTER или QUERY, чтобы выводить результаты на отдельный лист. Или использовать скрипты, чтобы копировать данные.

Настоятельно не рекомендую удалять строки из листа с ответами Формы.
Ответ написан
ProgrammerForever
@ProgrammerForever Куратор тега Google Sheets
Учитель, автоэлектрик, программист, музыкант
Александр правильно сказал, что нужно использовать QUERY или FILTER.
Если, вдруг, эти данные нужно потом редактировать - то формулами не обойтись.
Установите триггер на отправку формы для этой функции. Строки будут переноситься автоматом, без формул.
// Установить триггер на отправку формы
function onFormSubmitTrigger() {
  const formDataSheetName = "Общая база";
  const sheetNameHeader = "Округ или город "; // Заголовок который определяет имя листа. Обратите внимание, тут пробел в данных лишний, лучше всего при изменении заголовка просто копировать значение сюда. Или наоборот - отсюда.

  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let formDataSheet = ss.getSheetByName(formDataSheetName);

  let lastRow = formDataSheet.getLastRow(); // Номер строки с последним ответом
  
  let headers = formDataSheet.getRange(`1:1`).getValues()[0]; // Заголовки
  let sheetNameColumnIndex = headers.findIndex(h=>h===sheetNameHeader); // Индекс столбца который определяет имя листа
  if (sheetNameColumnIndex===-1){ // Если не найден
    throw new Error(`Не найдено "${sheetNameHeader}" в заголовках`);
  };

  let lastAnswers = formDataSheet.getRange(`${lastRow}:${lastRow}`).getValues()[0]; // Строка данных последних ответов

  let outSheetName = lastAnswers[sheetNameColumnIndex]; // Получаем имя выходного листа
  let outSheet = ss.getSheetByName(outSheetName) || ss.insertSheet(outSheetName); // Получаем лист или добавляем такой (если его нет)
  outSheet.appendRow(lastAnswers); // Выводим данные
};
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы