Google Sheets: регистрация нового значения Cells в журнале - PullRequest
0 голосов
/ 15 ноября 2018

Я пишу функцию 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

1 Ответ

0 голосов
/ 15 ноября 2018

Для предоставленного образца листа, попробуйте этот скрипт:

Пример сценария:

/*@description: [onEdit] If the active sheet is 'Setup' and active cell is 'A4'] {Copy A4 new value to first free row in column B in the page called 'log'}.*/
function onEdit(e){
 var rng = e.range;
 var ss = e.source;
 if(rng.getA1Notation()==='A4' && rng.getSheet().getName()=='Setup'){
    ss.getSheetByName('log').appendRow([new Date(),e.value])
 }
}

Ссылки:

...