我正在使用此Google脚本在设置列中的单元格更新后,在我的Google表格列中获取时间戳:
`function activeSheetName() {
return
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
}
function onEdit(event)
{
var timezone = "GMT+9";
var timestamp_format = "MM-dd-yyyy"; // Timestamp Format.
var updateColName = "Profit";
var timeStampColName = "Time";
var sheet = event.source.getSheetByName(activeSheetName()); //Name of the sheet where you want to run this script.
var actRng = event.source.getActiveRange();
var editColumn = actRng.getColumn();
var index = actRng.getRowIndex();
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
var dateCol = headers[0].indexOf(timeStampColName);
var updateCol = headers[0].indexOf(updateColName); updateCol = updateCol+1;
if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
var cell = sheet.getRange(index, dateCol + 1);
var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
cell.setValue(date);
}
}`
当我手动更改触发列中的值时,脚本可以正常工作。但是,我在触发器列中使用了一个基于"触发器的公式,它会在更改/更新时自动更新触发器列。问题是此脚本不会响应列中填充的触发数据,只会手动输入值。我怎么能绕过这个?
答案 0 :(得分:1)
重构代码,以便通过独立函数完成时间戳的编写。然后通过onEdit()
以及您的其他触发器调用该函数。
function addTimestamp(range) {
// add the timestamp
}
function onEdit(event) {
// does something
addTimestamp(range);
}
function yourOtherTrigger() {
// does something
addTimestamp(range);
}
您还应该查看event object documentation。您对event
的使用效率不高(尤其是event.source.getSheetByName(activeSheetName())
和event.source.getActiveRange()
)。
答案 1 :(得分:0)
公式无法激活简单或可安装的触发器。要解决这个问题,你必须重新考虑你的解决方案,
也许不是逐个“读取”更改,而是通过编辑多个单元格范围来读取更改,例如用户粘贴数据或进行填充时。
或许您应该设计一种方法来捕获要输入的数据和时间戳。
对于某些用例,最简单的解决方案是将Google表单用于其他应创建Web应用程序。
参考
相关