如何在 onEdit 触发器上执行 copyTo 后附加时间戳?
How to append a timestamp after a copyTo has been executed on an onEdit trigger?
我正在使用 onEdit 函数触发(除其他事项外)将单行(由两列组成)移动到新 sheet(称为 CAC)的 copyTo。无关紧要,onEdit 触发器也在向不同的 sheet 添加时间戳。我不知道如何在 copyTo 登陆位置右侧的列中的 CAC sheet 中添加另一个时间戳。我假设它是偏移量和在 copyTo 中嵌套某些东西的组合,但经过一段时间的尝试后,无法弄清楚!谢谢!
function onEdit(e) {
// DUE TODAY
{
e.source.toast('Processing...');
var sh=e.range.getSheet();
var name=sh.getName();
if(name=='Posting Tasks' && e.range.columnStart==1 && e.value) {
e.source.toast('Processing...');
var id=e.range.offset(0,2).getValue();
var tsh=e.source.getSheetByName('Database');
var idA=tsh.getRange(3,2,tsh.getLastRow()-2,1).getValues().map(function(r){return r[0]});
var row=idA.indexOf(id)+3;
var tsh=e.source.getSheetByName('Database').getRange(row,11).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy"));
}
// Copy to CAC
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet()
if(ss.getActiveSheet() === 'Posting Tasks'){
//Get active cell
var cell = sheet.getActiveCell();
var cellCol = cell.getColumn();
var cellRow = cell.getRow();
var exportRange = sheet.getRange(cellRow,2,1,6);
//Select the paste destination
var pasteDestination = ss.getSheetByName('CAC');
var pasteEmptyBottomRow = pasteDestination.getLastRow() + 1;
//Copy the row to the new destination
exportRange.copyTo(pasteDestination.getRange(pasteEmptyBottomRow,3),
SpreadsheetApp.CopyPasteType.PASTE_VALUES);
// add timestamp
}
- 您想将时间戳放在
exportRange.copyTo(pasteDestination.getRange(pasteEmptyBottomRow,3), SpreadsheetApp.CopyPasteType.PASTE_VALUES)
复制的值列的右列。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
在这个修改中,我使用了offset()
。
修改后的脚本:
当你的脚本修改后,变成如下。
从:
exportRange.copyTo(pasteDestination.getRange(pasteEmptyBottomRow,3),
SpreadsheetApp.CopyPasteType.PASTE_VALUES);
到:
var timestamp = new Date();
var destRange = pasteDestination.getRange(pasteEmptyBottomRow,3);
exportRange.copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES);
destRange.offset(0, exportRange.getNumColumns() - 1, exportRange.getNumRows()).setValue(timestamp);
- 当您 运行 修改脚本时,时间戳将放在复制值右列的单元格中。
注:
- 如果您只想将时间戳放在一个单元格中,请将
destRange.offset(0, exportRange.getNumColumns() - 1, exportRange.getNumRows()).setValue(timestamp);
修改为destRange.offset(0, exportRange.getNumColumns() - 1).setValue(timestamp);
。
- 在这种情况下,作为示例,
new Date()
用作时间戳。因此,日期作为日期对象放入单元格。如果要查看时间,请设置带有日期对象的单元格格式。
参考:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
我正在使用 onEdit 函数触发(除其他事项外)将单行(由两列组成)移动到新 sheet(称为 CAC)的 copyTo。无关紧要,onEdit 触发器也在向不同的 sheet 添加时间戳。我不知道如何在 copyTo 登陆位置右侧的列中的 CAC sheet 中添加另一个时间戳。我假设它是偏移量和在 copyTo 中嵌套某些东西的组合,但经过一段时间的尝试后,无法弄清楚!谢谢!
function onEdit(e) {
// DUE TODAY
{
e.source.toast('Processing...');
var sh=e.range.getSheet();
var name=sh.getName();
if(name=='Posting Tasks' && e.range.columnStart==1 && e.value) {
e.source.toast('Processing...');
var id=e.range.offset(0,2).getValue();
var tsh=e.source.getSheetByName('Database');
var idA=tsh.getRange(3,2,tsh.getLastRow()-2,1).getValues().map(function(r){return r[0]});
var row=idA.indexOf(id)+3;
var tsh=e.source.getSheetByName('Database').getRange(row,11).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy"));
}
// Copy to CAC
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet()
if(ss.getActiveSheet() === 'Posting Tasks'){
//Get active cell
var cell = sheet.getActiveCell();
var cellCol = cell.getColumn();
var cellRow = cell.getRow();
var exportRange = sheet.getRange(cellRow,2,1,6);
//Select the paste destination
var pasteDestination = ss.getSheetByName('CAC');
var pasteEmptyBottomRow = pasteDestination.getLastRow() + 1;
//Copy the row to the new destination
exportRange.copyTo(pasteDestination.getRange(pasteEmptyBottomRow,3),
SpreadsheetApp.CopyPasteType.PASTE_VALUES);
// add timestamp
}
- 您想将时间戳放在
exportRange.copyTo(pasteDestination.getRange(pasteEmptyBottomRow,3), SpreadsheetApp.CopyPasteType.PASTE_VALUES)
复制的值列的右列。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
在这个修改中,我使用了offset()
。
修改后的脚本:
当你的脚本修改后,变成如下。
从:exportRange.copyTo(pasteDestination.getRange(pasteEmptyBottomRow,3),
SpreadsheetApp.CopyPasteType.PASTE_VALUES);
到:
var timestamp = new Date();
var destRange = pasteDestination.getRange(pasteEmptyBottomRow,3);
exportRange.copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES);
destRange.offset(0, exportRange.getNumColumns() - 1, exportRange.getNumRows()).setValue(timestamp);
- 当您 运行 修改脚本时,时间戳将放在复制值右列的单元格中。
注:
- 如果您只想将时间戳放在一个单元格中,请将
destRange.offset(0, exportRange.getNumColumns() - 1, exportRange.getNumRows()).setValue(timestamp);
修改为destRange.offset(0, exportRange.getNumColumns() - 1).setValue(timestamp);
。 - 在这种情况下,作为示例,
new Date()
用作时间戳。因此,日期作为日期对象放入单元格。如果要查看时间,请设置带有日期对象的单元格格式。
参考:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。