Как создать скрипт для Google Sheets, который будет автоматически заполнять данные?

Добрый день! <br/> <br/> Я разрабатываю сценарий с использованием сервиса Make, в котором получаю данные от чат-бота и автоматически вношу их в строки таблицы Google Sheets. Однако мне необходимо, чтобы для этих данных применялись две формулы. Я вводил формулы вручную, но при добавлении данных через Make они удаляются. Мне порекомендовали использовать скрипт в Google Sheets. <br/> <br/> Данные, которые я получаю от бота, следующие: <br/> Ячейка А - пол (man/woman) <br/> Ячейка В - вес (число) <br/> Ячейка С - рост (число) <br/> Ячейка D - возраст (число) <br/> <br/> Из этих данных мне необходимо получить результаты: <br/> <b>Ячейка E </b> - дневная норма калорий (используемая формула: =ARRAYFORMULA(IF(A2:A = "man", 88.362 + (13.397 * B2:B) + (4.799 * C2:C) - (5.677 * D2:D), IF(A2:A = "woman", 447.593 + (9.247 * B2:B) + (3.098 * C2:C) - (4.330 * D2:D), "Неверный пол")))) <br/> <b>Ячейка F </b> - выбор дефицита калорий (используемая формула: =ARRAYFORMULA(IF(E2:E > 2300, "1800 ккал", IF(E2:E > 2000, "1650 ккал", IF(E2:E > 1700, "1500 ккал", "1350 ккал")))) <br/> <br/> Однако при заполнении строки с помощью Make эти формулы стираются. Поэтому мне нужен скрипт, который сможет решить эту проблему. Заранее спасибо!
  • 10 ноября 2024 г. 0:43
Ответы на вопрос 2
Вы можете использовать Google Apps Script для автоматического применения формул к ячейкам в Google Sheets, когда данные добавляются с помощью сервиса Make. Ниже представлен пример скрипта, который будет брать введенные данные и автоматически заполнять нужные формулы в столбцы E и F.

1. Откройте Google Sheets.
2. Перейдите в меню `Extensions` (Дополнения) -> `Apps Script`.
3. Удалите весь код в открывшемся редакторе и вставьте следующий код:

```javascript
function onEdit(e) {
  const sheet = e.source.getActiveSheet();
  const range = e.range;

  // Проверяем, что данные вводятся на листе, где необходимо(например, "Лист1")
  if (sheet.getName() === "Лист1" && range.getColumn() <= 4) {
    const row = range.getRow();

    // Если данные были добавлены или изменены в строке
    if (row > 1) {
      const gender = sheet.getRange(row, 1).getValue();
      const weight = sheet.getRange(row, 2).getValue();
      const height = sheet.getRange(row, 3).getValue();
      const age = sheet.getRange(row, 4).getValue();

      // Расчет дневной нормы калорий
      let dailyCalories;
      if (gender === "man") {
        dailyCalories = 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age);
      } else if (gender === "woman") {
        dailyCalories = 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age);
      } else {
        dailyCalories = "Неверный пол";
      }

      // Установка дневной нормы калорий в ячейку E
      sheet.getRange(row, 5).setValue(dailyCalories);

      // Определение дефицита калорий
      let calorieLoss;
      if (dailyCalories > 2300) {
        calorieLoss = "1800 ккал";
      } else if (dailyCalories > 2000) {
        calorieLoss = "1650 ккал";
      } else if (dailyCalories > 1700) {
        calorieLoss = "1500 ккал";
      } else {
        calorieLoss = "1350 ккал";
      }

      // Установка дефицита калорий в ячейку F
      sheet.getRange(row, 6).setValue(calorieLoss);
    }
  }
}
```

4. Сохраните скрипт (например, `AutoFillCalories`).
5. Закройте редактор скриптов.

Теперь, когда вы будете добавлять или изменять данные в ячейках A, B, C или D, скрипт автоматически заполнит ячейки E и F соответствующими значениями, основываясь на введенных данных.

Важно помнить, что данный скрипт сработает только для первой строки, начиная со второй. Если вам необходимо изменить это поведение (например, если у вас есть заголовок в первой строке), вы можете легко внести корректировки в условие для `row > 1`.
Ответ chatgpt, проверяйте: 

Чтобы решить проблему, можно использовать Google Apps Script. Скрипт будет автоматически заполнять формулы в ячейки после добавления данных в таблицу. Вот как это сделать:

1. Откройте Google Sheets.

2. Перейдите в меню Extensions → Apps Script.

3. Вставьте следующий скрипт:

function onEdit(e) {
var sheet = e.source.getActiveSheet();
var range = e.range;

// Убедитесь, что скрипт работает только для определённого листа
if (sheet.getName() === "Sheet1") { // Замените "Sheet1" на имя вашего листа
var row = range.getRow();
var col = range.getColumn();

// Проверяем, что данные добавляются в диапазон A:D
if (col >= 1 && col <= 4 && row > 1) { // Пропускаем заголовок
var gender = sheet.getRange(row, 1).getValue(); // Ячейка A
var weight = sheet.getRange(row, 2).getValue(); // Ячейка B
var height = sheet.getRange(row, 3).getValue(); // Ячейка C
var age = sheet.getRange(row, 4).getValue(); // Ячейка D

// Вычисление дневной нормы калорий
var calories;
if (gender === "man") {
calories = 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age);
} else if (gender === "woman") {
calories = 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age);
} else {
calories = "Неверный пол";
}
sheet.getRange(row, 5).setValue(calories); // Записываем в ячейку E

// Вычисление дефицита калорий
var deficit;
if (typeof calories === "number") {
if (calories > 2300) {
deficit = "1800 ккал";
} else if (calories > 2000) {
deficit = "1650 ккал";
} else if (calories > 1700) {
deficit = "1500 ккал";
} else {
deficit = "1350 ккал";
}
} else {
deficit = "Ошибка";
}
sheet.getRange(row, 6).setValue(deficit); // Записываем в ячейку F
}
}
}

4. Сохраните проект, например, как AutoFillFormulas.

5. Перейдите в Triggers (триггеры) и добавьте новый триггер:

Выберите функцию onEdit.

Выберите событие On edit.

Теперь, когда Make добавляет данные в столбцы A:D, скрипт автоматически вычислит значения для столбцов E и F.
Похожие вопросы