#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.
Комментариев нет:
Отправить комментарий