Я пишу функцию onEdit для рабочего листа.
Я работаю в музыкальной студии, и когда мы растем и совершенствуемся, мы постепенно увеличиваем стоимость каждого трека, чтобы покрыть накладные расходы и новое студийное оборудование.
Тем не менее, мы хотим, чтобы наши предыдущие клиенты за каждую песню были сохранены.
Наилучший способ, который я нашел для этого, - использовать таблицу vlookup для поиска в отдельном журнале цен.
Но я хотел бы автоматизировать регистрацию новых цен, чтобы не забывать, когда цена была изменена, или забывать регистрировать все это вместе.
Идеальным решением для меня было бы:
[onEdit] Если активный лист настроен, а активная ячейка - C6
{Скопировать новое значение C6 в первую свободную строку в столбце B на странице с именем 'log'}.
Ниже приведен мой код для автоматического добавления разного времени для художников, в самом низу - моя бездействующая попытка скопировать новую цену в «журнал».
Я также сделал очень простой образец листа, чтобы лучше проиллюстрировать мою цель.
function onEdit(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = SpreadsheetApp.getActiveSheet();
var sheetName = "Boring";
var sheet1 = ss.getSheetByName("Roster");
var sheet2 = ss.getSheetByName("Ledger");
var sheet3 = ss.getSheetByName("Setup");
var sheet4 = ss.getSheetByName("Invoice");
var sheet5 = ss.getSheetByName("Boring");
var Log = ss.getSheetByName("Log");
var r = s.getActiveCell();
var Change = sheet3.getRange('C6');
var row = r.getRow();
var time = new Date();
var sheet = s.getSheetName();
var letter = r.getColumn() ;
var Tracking = sheet1.getRange('E' + row.toString()).getValue();
var Editing = sheet1.getRange('F' + row.toString()).getValue();
var Mixing =sheet1.getRange('G' + row.toString()).getValue();
var Master =sheet1.getRange('H' + row.toString()).getValue();
var date = sheet2.getRange('C' + row.toString()).isBlank();
switch (sheet){
case'Roster':
switch(letter){
case 5 :
switch (Tracking){
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('S' + row.toString()).setValue(time);
break;
default :
if(sheet1.getRange('S' + row.toString()).getValue() > 0 ){
break;
} else{
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('S' + row.toString()).setValue(time);}
break;
case 5 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('T' + row.toString()).setValue(time);
break;
case "":
ss.getRange("S"+row).clearContent();
ss.getRange("T"+row).clearContent();
break;
}//switch tracking
break;
case 6:
switch (Editing){
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('U' + row.toString()).setValue(time);
break;
default :
if(sheet1.getRange('U' + row.toString()).getValue() > 0 ){
break;
} else{
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('U' + row.toString()).setValue(time);}
break;
case 4 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('V' + row.toString()).setValue(time);
break;
case "":
ss.getRange("U"+row).clearContent();
ss.getRange("V"+row).clearContent();
break;
}
break;
case 7 :
switch (Mixing) {
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('W' + row.toString()).setValue(time);
break;
default :
if(sheet1.getRange('W' + row.toString()).getValue() > 0 ){
break;
} else{
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('W' + row.toString()).setValue(time);}
break;
case 2 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('X' + row.toString()).setValue(time);
break;
case "":
ss.getRange("W"+row).clearContent();
ss.getRange("X"+row).clearContent();
break;
}
break;
case 8 :
switch(Master) {
case 1 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('Y' + row.toString()).setValue(time);
break;
case 2 :
time = Utilities.formatDate(time, "GMT-08:00", "MM/dd/yy");
sheet1.getRange('Z' + row.toString()).setValue(time);
break;
case "":
ss.getRange("Y"+row).clearContent();
ss.getRange("Z"+row).clearContent();
break;
}
break;
}
break;
case'Setup':
switch (letter){
case 'C' :
switch (row){
case 6 :
var targetSheet = ss.getSheetByName("Log"); //gets the lgo sheet
var target = Log.getRange(Log.getLastRow() + 1, 1);// "log"
var nextCell = r.offset(0, 1);
sheet3.getRange(3, 6, 1).copyTo(target, {contentsOnly:true});
break;}}
}
}
Вот чрезвычайно упрощенная версия моей электронной таблицы.
https://docs.google.com/spreadsheets/d/1i192uK-a-ALim7pvL-mkty_1nh_m9aghvmrxmiiRYKs/edit?usp=sharing
Вот мой фактический лист, если вам нужно его увидеть
https://docs.google.com/spreadsheets/d/1PK0-WsfdRtFooLWb1GUCHjxGoQJHFLAg4CVh8pmuEO4/edit?usp=sharing