0

我尝试了该脚本的许多不同变体,但无法弄清楚它为什么不起作用。我想用多个标签上的时间戳更新同一个单元格“J3”。我已经在使用 onEdit(e) 的电子表格上有另一个函数,所以我使用 onEdit 触发器设置了一个新函数。我检索要更新的选项卡的名称并将它们存储在一个数组中。

function Overview_timestamp(e) //function to use in the onEdit trigger
{
  var activeSheet = e.source.getActiveSheet();
    var range = e.range;
  var cellToStamp = "J3" ;
  var name_range =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Structure').getRange(2, 5, 14, 1).getValues(); //sheets i want to update
var flattened_name_range = [] ; //converting into 1D array
for (var i = 0; i < name_range.length; i++) {
    flattened_name_range.push(name_range[i][0]);
}


   if(flattened_name_range.indexOf(activeSheet())!==-1 ) {

      activeSheet.getRange(cellToStamp).setValue(new Date()).setNumberFormat("yyyy-MM-dd hh:mm:ss");}
}
4

1 回答 1

1

尝试这个:

 function Overview_timestamp(e) {
  const sh = e.range.getSheet();
  if (sh.getName() == 'Sheet name') {//just to limit action to one sheet but it would be nice to have additional control like clicking a  checkbox or selecting a value on a validated cell.
    const shts = e.source.getSheetByName('Structure').getRange(2, 5, 14).getValues().flat();
    shts.forEach(n => {
      e.source.getSheetByName(n).getRange('J3').setValue(new Date()).setNumberFormat("yyyy-MM-dd hh:mm:ss")
    });
  }
}

我使用 Sheet1 上 A1 的复选框在我的工作表上这样做了

function onEdit(e) {
  //e.source.toast('entry');
  const sh = e.range.getSheet();
  if (sh.getName() == 'Sheet1' && e.range.columnStart==1 && e.range.rowStart==1 && e.value=='TRUE') {
    //e.source.toast('cond');
    const shts = e.source.getSheetByName('Sheet2').getRange(2, 5, 14).getValues().flat().filter(e=>e);
    shts.forEach(n => {
      e.source.getSheetByName(n).getRange('J3').setValue(new Date()).setNumberFormat("yyyy-MM-dd hh:mm:ss")
    });
    e.range.setValue('FALSE');
  }
}
于 2021-04-16T19:56:09.430 回答