Google apps script 谷歌表单更改时间戳
我试图实现的是非常简单的,但是我对GoogleSheet脚本编辑器非常不舒服 我希望在活动工作表中发生更改时更新某个单元格中的日期Google apps script 谷歌表单更改时间戳,google-apps-script,google-sheets,timestamp,Google Apps Script,Google Sheets,Timestamp,我试图实现的是非常简单的,但是我对GoogleSheet脚本编辑器非常不舒服 我希望在活动工作表中发生更改时更新某个单元格中的日期 function createOnChangeTrigger(){ const ss = SpreadsheetApp.getActive(); ScriptApp.newTrigger("updateCell") .forSpreadsheet(ss) .onChange() .create(); } function u
function createOnChangeTrigger(){
const ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger("updateCell")
.forSpreadsheet(ss)
.onChange()
.create();
}
function updateCell(){
const ss = SpreadsheetApp.getActive();
const sh = ss.getActiveSheet();
sh.getRange('B1').setValue(new Date());
}
这就是我目前得到的:
//Timestamp on change
function timestampOnChange() {
getActiveCell().setValue(new Date());
}
但是,即使这样也会返回错误消息:/解释:
- 您需要创建特定事件的触发器 该函数将在电子表格运行时更新活动工作表的特定单元格 更改内容或结构
函数用当前值更新B1的值 活动工作表的时间戳updateCell()
- 我建议您更新特定的表,而不是活动的
通过使用以下方式创建工作表:
而不是:const sh = ss.getSheetByName('Sheet1');
const sh = ss.getActiveSheet();
解决方案:
- 更详细地说,
函数将创建 存在时将执行的createOnChangeTrigger()
触发器 是电子表格文件和活动工作表的内容或结构的更改onChange()
function createOnChangeTrigger(){ const ss = SpreadsheetApp.getActive(); ScriptApp.newTrigger("updateCell") .forSpreadsheet(ss) .onChange() .create(); } function updateCell(){ const ss = SpreadsheetApp.getActive(); const sh = ss.getActiveSheet(); sh.getRange('B1').setValue(new Date()); }
说明: 在脚本编辑器中复制/粘贴这两个函数,并仅执行一次
createOnChangeTrigger()
参考资料:
从问题中:
但是,即使这样,也会返回错误消息
上面的代码返回一个错误,因为没有名为getActiveCell()
的内置Google Apps脚本函数。要获取活动单元格,可以使用
SpreadsheetApp.getCurrentCell()
或
或者,如果您使用编辑事件对象(假设它是分配给e
),您可以使用e.range
值得注意的是,如果在活动单元格上使用setValue(new Date())
,则在该单元格上输入的内容将被覆盖
在堆栈溢出的姊妹网站Web应用程序上,Google表单中有很多关于时间戳的Q/a,实际上,它们有标签-->。到目前为止,这个标签有102个问题。似乎是一个很好的解决方案,但它对我不起作用。它也不会返回错误消息。当我执行它时,它会说“正在加载…”大约2秒钟,当你将鼠标悬停在字段上方时,会出现一条错误消息“错误[新行]正在加载数据…”。在这2秒钟之后,它只是一个空单元格,没有任何关于如何修复它的提示…@Robin33共享你的工作表副本。我不知道你为什么会出错。我无法复制它。您确定只执行了createOnChangeTrigger()
?牢房感谢您的帮助,非常感谢(我们在工作表上进行了沟通,工作表现在将是只读的。请定义您所指的更改类型?写入/编辑/删除某些内容或对电子表格结构的更改,例如插入/删除行?指定您所指的更改很重要,因为检测不同更改的触发器是不同的e应更新日期
SpreadsheetApp.getActiveRange()