当我一次复制多个单元格中的粘贴值时 onEdit 不起作用

onEdit Not Working When I Copy&Paste Values in Multiple Cells at Once

(这是 - 的后续问题)

我的问题: 当我 dragging/copy-pasting 一系列相邻单元格(在同一列中)的数据时,只有第一个条目产生 time-stamp 输出。

我用脚本做了什么: 当有人编辑 'status' 列(大多数时候,'status' 列)时,我正在使用 onEdit 帮助我在 'timestamp' 列中添加时间戳。 而且这些列并不总是并排。

例如:

传播背景sheet我正在研究:

  1. 此 sheet
  2. 共有 6 个标签
  3. 每个选项卡中的每个 'status' 和 'timestamp' 都不在同一列中
  4. 在某些标签中,'status' 可能有不同的标题(例如 'Name')

目前我在 Whosebug 上的发现:

不幸的是,我太新了,无法编写脚本,并且在阅读了上述文章后不知道如何修复我的代码。

我使用的代码:

function onEdit(e) {
addTimestamp(e);
}
    
  function addTimestamp(e){

var row = e.range.getRow();
var col = e.range.getColumn();

 if(e.source.getActiveSheet().getName() === "Apple" && col === 22 && row >= 2){
    
    var time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
    
    e.source.getActiveSheet().getRange(row,25).setValue(time);}
    
    if(e.source.getActiveSheet().getName() === "Banana" && col === 55 && row >= 2){
    
    var time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
    
    e.source.getActiveSheet().getRange(row,56).setValue(time);}

我相信你的目标如下。

  • 您想将 time 的值放在编辑单元格的右侧。
  • 即使在复制和粘贴值时,您也想实现这一点。
  • 您想为多个选项卡反映这一点,并且每个选项卡都需要为每一列设置值。每列都不同。

修改点:

  • 在这种情况下,我想建议使用事件对象的range。事件对象range的值类似于"range":{"columnEnd":#,"columnStart":#,"rowEnd":#,"rowStart":#}。我还以为这个可以用呢
  • 为了管理多个选项卡的条件,我想建议使用一个对象。键和值分别是 sheet 名称和检查列号。

当以上几点反映到你的脚本中,就会变成下面这样。

修改后的脚本:

请按如下方式修改addTimestamp的函数。请复制并粘贴以下脚本并保存。使用此脚本时,请编辑单元格并将值复制并粘贴到 sheet 的检查栏中。这样,脚本就是运行.

function addTimestamp(e) {
  var obj = {"Apple": 23, "Banana": 55}; // Please set your condition. The key and value are the sheet name and the cheking column number, respectively.

  var range = e.range;
  var sheet = range.getSheet();
  var sheetName = sheet.getName();
  var rowStart = range.rowStart;
  var rowEnd = range.rowEnd;
  var columnStart = range.columnStart;
  var columnEnd = range.columnEnd;
  if (obj[sheetName] && columnStart == columnEnd && columnStart == obj[sheetName] && rowStart >= 2) {
    var time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');
    sheet.getRange(rowStart, obj[sheetName] + 1, rowEnd - rowStart + 1).setValue(time);
  }
}
  • 如果要添加更多sheet条件,请修改var obj = {"Apple": 23, "Banana": 55};

参考: