当我一次复制多个单元格中的粘贴值时 onEdit 不起作用
onEdit Not Working When I Copy&Paste Values in Multiple Cells at Once
(这是 - 的后续问题)
我的问题:
当我 dragging/copy-pasting 一系列相邻单元格(在同一列中)的数据时,只有第一个条目产生 time-stamp 输出。
我用脚本做了什么:
当有人编辑 'status' 列(大多数时候,'status' 列)时,我正在使用 onEdit 帮助我在 'timestamp' 列中添加时间戳。
而且这些列并不总是并排。
例如:
- 选项卡“Apple”,'status' = Y 列,'timestamp' = Z 列
- 选项卡“香蕉”,'status' = A 列,'timestamp' = B 列
传播背景sheet我正在研究:
- 此 sheet
共有 6 个标签
- 每个选项卡中的每个 'status' 和 'timestamp' 都不在同一列中
- 在某些标签中,'status' 可能有不同的标题(例如 'Name')
目前我在 Whosebug 上的发现:
- onEdit not triggering when pasting data
不幸的是,我太新了,无法编写脚本,并且在阅读了上述文章后不知道如何修复我的代码。
我使用的代码:
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};
。
参考:
(这是 -
我的问题: 当我 dragging/copy-pasting 一系列相邻单元格(在同一列中)的数据时,只有第一个条目产生 time-stamp 输出。
我用脚本做了什么: 当有人编辑 'status' 列(大多数时候,'status' 列)时,我正在使用 onEdit 帮助我在 'timestamp' 列中添加时间戳。 而且这些列并不总是并排。
例如:
- 选项卡“Apple”,'status' = Y 列,'timestamp' = Z 列
- 选项卡“香蕉”,'status' = A 列,'timestamp' = B 列
传播背景sheet我正在研究:
- 此 sheet 共有 6 个标签
- 每个选项卡中的每个 'status' 和 'timestamp' 都不在同一列中
- 在某些标签中,'status' 可能有不同的标题(例如 'Name')
目前我在 Whosebug 上的发现:
- onEdit not triggering when pasting data
不幸的是,我太新了,无法编写脚本,并且在阅读了上述文章后不知道如何修复我的代码。
我使用的代码:
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};
。