首页 > 解决方案 > 关于 Google 表格的最后修改日期,此 Google 脚本代码有什么问题?

问题描述

我是一个完整的初学者,只是试图制作一个我的家人可以用来进行预算的界面。我唯一苦苦挣扎的是某些单元格的最后修改日期的自动化。每当我将代码作为附加组件运行时,即使我将代码输入到第 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());
  } 
}

标签: javascriptdatetimeif-statementgoogle-apps-scriptgoogle-sheets

解决方案


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 */ ) {
    ...
}

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

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

    ...
}

推荐阅读