我有一个Google表格脚本,它将提交的表单数据的元素复制到另一个电子表格,然后转换一些数据以供单独使用。当我手动运行脚本时,脚本工作完美,但我希望它能自动运行。
此电子表格中连接了多种表单,所有表单都在不同时间提交数据。
所以,我有两个问题:
网上有很多文章都有答案,但很多都来自3年前,从那时起,Sheets,Forms和Script Editor的工作方式似乎发生了很大变化。
答案 0 :(得分:1)
你需要一个onFormSubmit函数 可安装的触发器。
如果您使用的是Html服务表单,则可以获得 来自表单事件的目标表单的名称 输出。你不能用从中创建的表单来做到这一点 电子表格。我能做的最好的是 将事件时间戳与时间戳进行比较 表单响应表的最后几行来确定哪一行 表格已更新。从那以后,这并非完全愚蠢 有可能提交多份表格 同时(但不太可能)。
试试这个:
//installable trigger also needed.
function onFormSubmit(e){
var ts=e.namedValues.Timestamp
findResponseForm(ts)
}
function findResponseForm(ts) {
var ss=SpreadsheetApp.getActiveSpreadsheet()
var s=ss.getSheetByName('Form Responses 1') //get 'Form Responses 1' sheet
var lr=s.getLastRow() //get last row number of 'Form Responses 1' sheet
var s1=ss.getSheetByName('Form Responses 2') //get 'Form Responses 2' sheet
var lr1=s1.getLastRow() //get last row number of 'Form Responses 2' sheet
var time1=s.getRange(lr, 1, 1,1).getValue() //get 'Form Responses 1'last Timestamp
var ftime1=Utilities.formatDate(time1, "GMT-6", "d/M/yyyy' 'HH:mm:ss") //convert 'Form Responses 1'last Timestamp format to form Timestamp format
var time2=s1.getRange(lr1, 1, 1,1).getValue() //get 'Form Responses 2'last Timestamp
var ftime2=Utilities.formatDate(time2, "GMT-6", "d/M/yyyy' 'HH:mm:ss") //convert 'Form Responses 1'last Timestamp format to form Timestamp format
if(ts==ftime1){ //if date/time match
Logger.log('Form Responses 1')
//call function to prosses 'Form Responses 1' data
}
else if(ts==ftime2){ //if date/time match
Logger.log('Form Responses 2')
//call function to prosses 'Form Responses 2' data
//Add more 'else if' if more forms are involved.
}
}