我正在使用Temboo来更新带有Arduino传感器数据的Google表格。我使用脚本为每个数据条目添加时间和日期戳,但由于数据未手动输入,我无法使用onEdit()触发器。我也试过创建一个onChange()触发器,如下所示,没有任何运气(触发参数是Run:onChange,事件:来自更改时的电子表格)。有没有可安装的触发器,有没有办法做到这一点?
function onChange(e){
var timezone = "GMT+8";
var date_format = "MM/dd/yyyy";
var time_format = "hh:mm:ss";
var updateColName = "sensor";
var DateColName = "date";
var TimeColName = "time";
// update time and date if the sheet is updated via an api call
if (e.changeType == "OTHER") {
var sheet = event.source.getSheetByName('Sheet1'); //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(DateColName);
var timeCol = headers[0].indexOf(TimeColName);
var updateCol = headers[0].indexOf(updateColName);
updateCol = updateCol + 1;
if (dateCol > -1 && timeCol > -1 && index > 1 && editColumn == updateCol) {
// only timestamp if 'Last Updated' header exists, but not in the header row itself!
var cellDate = sheet.getRange(index, dateCol + 1);
var cellTime = sheet.getRange(index, timeCol + 1);
var date = Utilities.formatDate(new Date(), timezone, date_format);
var time = Utilities.formatDate(new Date(), timezone, time_format);
cellDate.setValue(date);
cellTime.setValue(time);
}
}
};
提前致谢!
答案 0 :(得分:0)
基于this answer,如果单元格被更改但用户没有更改,则看起来没有直接触发onEdit()的解决方案。我使用提到here的时间触发脚本实现了一种解决方法。
答案 1 :(得分:0)
不久前我遇到过类似的问题。 我尝试了一切,最终我得到了可安装的触发器onChange
function onChange(e) {
var ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger('name of the function you need to trigger')
.forSpreadsheet(ss)
.onChange()
.create();
}
您需要在插入上述代码后保存脚本并运行onChange函数一次以安装触发器。您可以通过打开"当前项目的触发器来验证它是否已安装" 希望这有帮助!