繁体   English   中英

关于 Google 表格的最后修改日期,此 Google 脚本代码有什么问题?

[英]What is wrong with this Google Scripts code regarding last modified date for Google Sheets?

我是一个完整的初学者,只是想制作一个我家的 rest 可以用于预算的界面。 我唯一苦苦挣扎的是某些单元格的最后修改日期的自动化。 每当我将代码作为附加组件运行时,即使我将代码输入到第 10、11、15 列等中,它也只会按照第一条语句中的指定修改第 7 列。 似乎忽略了其他“else if”语句。

function onEdit(e) {
  var row = e.range.getRow();
  var col = e.range.getColumn();
  
  if(col === 5,6 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,7).setValue(new Date());
  } 
  else if(col === 10,11 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,12).setValue(new Date());
  } 
  else if(col === 15,16 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,17).setValue(new Date());
  } 
  else if(col === 20,21 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,22).setValue(new Date());
  } 
  else if(col === 25,26 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,27).setValue(new Date());
  } 
  else if(col === 30,31 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,32).setValue(new Date());
  } 
  else if(col === 35,36 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,37).setValue(new Date());
  } 
  else if(col === 40,41 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,42).setValue(new Date());
  } 
  else if(col === 45,46 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,47).setValue(new Date());
  } 
  else if(col === 50,51 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,52).setValue(new Date());
  } 
  else if(col === 55,56 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,57).setValue(new Date());
  } 
  else if(col === 60,61 && row > 3 && e.source.getActiveSheet().getName() === "2021" ){
    e.source.getActiveSheet().getRange(row,62).setValue(new Date());
  } 
}

if ( col === 5,6 ) {
    ...
}

相当于

if ( 6 ) {
    ...
}

if 语句始终为真,因为6是一个真值

 var col = 1; // Let's take 1 for example if ( col === 5,6 ) { console.log( 'Matches first if condition' ); } if ( 6 ) { console.log( 'Matches second if condition' ); } if ( col === 5 ) { console.log( 'Matches third if condition' ); }

要检查给定的数字是否在数字列表中,您可以:

  1. 分别比较
if ( ( col === 5 || col === 6 ) && /* the rest of your logic here */ ) {
    ...
}
  1. 将数字放入Array并使用indexOf找到匹配的数字,以便您将来可以轻松添加更多想要匹配的列号
if ( [ 5, 6 ].indexOf( col ) !== -1 && /* the rest of your logic here */ ) {
    ...
}

此外,您不必在每个if语句中执行row > 3 && e.source.getActiveSheet().getName() === "2021"检查。 检查一次并继续检查匹配的列

var row         = e.range.getRow();
var col         = e.range.getColumn();
var activeSheet = e.source.getActiveSheet();
var currentDate = new Date();

if ( row > 3 && e.source.getActiveSheet().getName() === "2021" ) {
    if ( col === 5 || col === 6 ) {
        activeSheet.getRange( row, 7 ).setValue( currentDate );
    }

    if ( col === 10 || col === 11 ) {
        activeSheet.getRange( row, 12 ).setValue( currentDate );
    }

    ...
}

另一种缩短代码并删除重复字符串的方法

function onEdit(e) {
      var row = e.range.getRow(),
          col = e.range.getColumn(),
          arrOfCols = [5,10,15,20,25,30,35,40,45,50,55,60];
    
      if (row > 3 && e.source.getActiveSheet().getName() === "2021") {
        if (arrOfCols.indexOf(col)>-1) e.range.offset(0,2).setValue(new Date());   
        if (arrOfCols.indexOf(col-1)>-1) e.range.offset(0,1).setValue(new Date())
      }
    }

if (arrOfCols.indexOf(col)>-1) - 此条件将检查当前列是否在arrOfCols列列表中 (5,10,15,20,25,30,35,40,45,50,55 ,60) - 如果,则向右偏移两列并写入时间戳e.range.offset(0,2).setValue(new Date())

'if (arrOfCols.indexOf(col-1)>-1)' - 此条件将检查当前列是否在arrOfCols列列表中 (6,11,16,21,26,31,36,41,46 ,51,56,61) - 如果,则向右偏移一列并写入时间戳e.range.offset(0,1).setValue(new Date())

function onEdit(e) {
  const sh = e.range.getSheet();
  const cA1 = [5,6,10,11,15,16,20,21,25,26,30,31,35,36,40,41,45,46,50,51,55,56,60,61]
  const cA2 = [7,7,12,12,17,17,22,22,27,27,32,32,37,37,42,42,47,47,52,52,57,57,62,62]
  const idx = cA1.indexOf(e.range.columnStart);
  if( sh.getName() == "2021" && e.range.rowStart>3 && ~idx ) {
    sh.getRange(e.range.rowStart, cA2[idx] ).setValue(new Date());
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM