function onEdit(e) {
SpreadsheetApp.getActiveRange().setValue(Utilities.formatString("email: %s",e.user.getEmail() ));
}
function onEditTrigger(event) {
var userEmail = event.user.getEmail(); //Email пользователя
if ((event.source.getActiveRange().getA1Notation()=="A1")&&(event.source.getActiveSheet().getName()=="Лист1")){
var arc=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Архив");
arc.getRange(arc.getLastRow()+1,1,1,3).setValues([[event.source.getActiveRange().getValue(),new Date(),userEmail ]]);
};
};
function dailyRecord(){
var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Лист1").getRange("A1") ;
var arc=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Архив");
arc.getRange(arc.getLastRow()+1,1,1,2).setValues([[range.getValue(),new Date()]]);
};
=filter(filter(GoogleFinance("CURRENCY:USDRUB"; "close"; D2);{0;1});{0\1})
╔═══╦═══╗
║ 1 ║ 2 ║
╠═══╬═══╣
║ 3 ║ 4 ║
╚═══╩═══╝
╔═══╦═══╗
║ 3 ║ 4 ║
╚═══╩═══╝
╔═══╗
║ 4 ║
╚═══╝
function doIt() {
var isModifed = false;
try{
var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); //Текущий лист
var data1 = ss.getRange("A3:E" + ss.getMaxRows()).getValues();
var data2 = ss
.getRange("m4:n" + ss.getMaxRows())
.getValues()
.filter(function(row) // Убираем пустые строки
{
return row[0]!="";
}
);
for (var row2=0;row2<data2.length;row2++){
for (var row1=0;row1<data1.length;row1++){
if (data1[row1][0]===data2[row2][0]){
data1[row1][4]+=data2[row2][1];
isModifed = true;
break; //Если значение найдено, дальше не ищем
};
};
};
if (isModifed ) {
ss.getRange("A3:E" + ss.getMaxRows()).setValues(data1); //Вывод данных
SpreadsheetApp.getActive().toast("Готово!");
}else{
SpreadsheetApp.getActive().toast("Такие артикулы не найдены!");
};
}catch(e){ //Если вдруг ошибка
Logger.log("Ошибка! " + e);
};
}
Но при большом количестве правил это может работать медленно, по крайней мере в гугл таблицах.
"Вести базу данных в базе данных". Пф... Кто же так делает?