Google 工作表:在日志中记录单元格的新值 sheet

Google Sheets: Logging a Cells new value on a log sheet

我正在为分类帐工作编写一个 onEdit 函数sheet。 我在一家音乐工作室工作,随着我们的成长和改进,我们逐渐增加每首曲目的成本以支付开销和新的工作室设备。 但是,我们希望保留我们以前的客户每首歌曲的费率。 我发现执行此操作的最佳方法是使用 vlookup table 搜索单独的价格日志 sheet。 但我想自动记录新价格,以避免忘记价格何时更改或忘记将所有价格记录在一起。

对我来说理想的解决方案是:
[onEdit] 如果活动 sheet 是 'setup' 并且活动单元格是 'C6'] {将 C6 新值复制到名为 'log' 的页面中 B 列的第一个空闲行}。

下面是我为艺术家自动添加不同时间的代码,最底部是我试图将新价格复制到“log.

我还做了一个非常简单的示例sheet来更好地说明我的目标。

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;}}
       
}
}

这是我的传播的极其简化的版本sheet。 https://docs.google.com/spreadsheets/d/1i192uK-a-ALim7pvL-mkty_1nh_m9aghvmrxmiiRYKs/edit?usp=sharing

这是我的真人 sheet 如果你需要看的话 https://docs.google.com/spreadsheets/d/1PK0-WsfdRtFooLWb1GUCHjxGoQJHFLAg4CVh8pmuEO4/edit?usp=sharing

对于提供的示例 sheet,试试这个脚本:

示例脚本:

/*@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])
 }
}

参考文献: