#javascript #события #google_spreadsheet #google_apps_script
Всем добрый день. Составляем файлик, где будем вести семейный бюджет. Столкнулся
со следующей задачей. Есть "направление" и "категория продуктов". В одном направлении
собраны определенные категории продуктов. Также есть форма ввода (типа опроса), что
бы мы могли забивать транзакции через мобильники. Так вот, нужно чтобы скрипт анализировал
категорию продуктов и автоматом проставлял направление. Допустим категория "метро",
автоматом проставляется в соседнем столбце направление "транспорт". Я написал пример
скрипта, который читает содержимое текущей ячейки и проставляет результаты в первой.
Вопрос в том, как это все повесить на событие ввода (нажал enter - скрипт отработал)
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
// var first = Browser.inputBox("First value");
if (SpreadsheetApp.getActiveRange().getValue() == "пиво"){
sheet.getRange("A1").setValue(SpreadsheetApp.getActiveRange().getValue());}
// sheet.getRange("A1").setValue("First value:");
// sheet.getRange("B1").setValue(first);
// var next = Browser.inputBox("Next value");
// sheet.getRange("A2").setValue("Next value:");
// sheet.getRange("B2").setValue(next);
// var result = sheet.getRange("B1").getValue() + sheet.getRange("B2").getValue();
// sheet.getRange("A3").setValue("Result:");
// sheet.getRange("B3").setValue(result);
// Browser.msgBox("Summ is: " + result);
ss.addMenu("Test", [{name: "Test", functionName: "myFunction"}]);
}
Ответы
Ответ 1
Вероятно, использовать триггер onEdit(event): onEdit(event) The onEdit function runs automatically when any cell of the spreadsheet is edited. A very simple use case for onEdit is to record the last modified time in a comment on the cell that was edited. The argument e that is passed in to the function contains a single property, source , which is the spreadsheet that is being edited. function onEdit(event) { var ss = event.source.getActiveSheet(); var r = event.source.getActiveRange(); r.setComment("Last modified: " + (new Date())); }Ответ 2
Все очень просто, используйте функцию onEdit(event) которая реагирует только на изменение данных в таблице. Пример готового решения который при изменение любой строки вносит данные в столбец номер 8, номера строки та которая была изменена Вами function onEdit(event) { var sheet = event.source.getActiveSheet(); var sheetName = event.source.getActiveSheet().getSheetName() // Получаем имя листа который активен var actRng = event.source.getActiveRange(); var index = actRng.getRowIndex(); if (index > 1 && sheetName == "Менеджер") { Logger.log(event.source.parameters); //var user = Session.getEffectiveUser().getEmail(); var user = Session.getActiveUser().getEmail(); Logger.log(index); sheet.getRange(index, 8).setValue(user); } Исходя из Вашей задачи Вам осталось только переписать условие iF.
Комментариев нет:
Отправить комментарий