在没有提交表单的情况下触发 Google 脚本
Trigger Google script without Form submission
我有一个 Google 脚本,它 运行 在表单提交时触发。
提交表单后,新行会添加到链接的电子表格中,脚本 运行 会执行一些操作来创建新文件夹和 Google 文档。
我想通过 Zapier 添加新行而不是表单汇总来对此进行修改。
使用 Zapier 添加新行很容易,
但是,在将脚本触发器设置为来自 'On form submit' 的 'On change' 事件时,我得到了错误;
TypeError: Cannot read property '0' of undefined
我认为在使用 e.values
时,脚本期望从表单提交中获得这些,但失败了,因为它们在 Zapier 添加的行中不存在。
问题:
我不知道如何解决错误并允许脚本以与从 Zapier 添加新行时提交表单时相同的方式 运行?
https://i.stack.imgur.com/vJuRw.png
我有什么;
function autoFillGoogleDocFromForm(e) {
var Timestamp = e.values[0];
var NAME = e.values[1];
var file = DriveApp.getFileById('1234');
var folder = createNewFolder();
var copy = file.makeCopy(NAME, folder);
var newId = copy.getId();
try{
var doc = DocumentApp.openById(newId).addEditor(email);
}
catch(error){
var doc = DocumentApp.openById(newId);
}
var body = doc.getBody();
body.replaceText('{{Name}}', Name);
doc.saveAndClose();
}
<!--This creates a Google drive folder -->
function createNewFolder() {
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("Sheet1");
var POSNAME = names.getRange(names.getLastRow(),
2).getValue();
var folders = DriveApp.getFoldersByName(NAME);
while (folders.hasNext()) {
folder = folders.next();
if(folder.getName()==NAME){
return folder;
}
}
var parentFolder=DriveApp.getFolderById("1234");
return parentFolder.createFolder(NAME);
}
我认为您的值数组中缺少一个级别,您需要在获取值之前将 e
转换为 range
。请记住电子表格总是有二维数组。
我在编辑时将空白电子表格中的以下代码设置为 运行,并将值带入单元格 a1
和 b1
。它有过多的变量只是为了说明正在发生的事情。您显然可以减少这些,但最终我认为这会让您获得您正在寻找变量 Timestamp
和 NAME
.
的值
/**
* @OnlyCurrentDoc
*/
const mySS = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
function onEdit(e){
var theRange = e.range;
var allValues = theRange.getValues();
var singleRowValues = allValues[0];
var firstColumnofRowValue = singleRowValues[0];
var secondColumnofRowValue = singleRowValues[1];
var Timestamp = firstColumnofRowValue;
var NAME = secondColumnofRowValue;
//Test Output
mySS.getRange("A1").offset(0,0,1,2).setValues([[Timestamp,NAME]]);
}
我有一个 Google 脚本,它 运行 在表单提交时触发。
提交表单后,新行会添加到链接的电子表格中,脚本 运行 会执行一些操作来创建新文件夹和 Google 文档。
我想通过 Zapier 添加新行而不是表单汇总来对此进行修改。
使用 Zapier 添加新行很容易,
但是,在将脚本触发器设置为来自 'On form submit' 的 'On change' 事件时,我得到了错误;
TypeError: Cannot read property '0' of undefined
我认为在使用 e.values
时,脚本期望从表单提交中获得这些,但失败了,因为它们在 Zapier 添加的行中不存在。
问题: 我不知道如何解决错误并允许脚本以与从 Zapier 添加新行时提交表单时相同的方式 运行? https://i.stack.imgur.com/vJuRw.png
我有什么;
function autoFillGoogleDocFromForm(e) {
var Timestamp = e.values[0];
var NAME = e.values[1];
var file = DriveApp.getFileById('1234');
var folder = createNewFolder();
var copy = file.makeCopy(NAME, folder);
var newId = copy.getId();
try{
var doc = DocumentApp.openById(newId).addEditor(email);
}
catch(error){
var doc = DocumentApp.openById(newId);
}
var body = doc.getBody();
body.replaceText('{{Name}}', Name);
doc.saveAndClose();
}
<!--This creates a Google drive folder -->
function createNewFolder() {
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("Sheet1");
var POSNAME = names.getRange(names.getLastRow(),
2).getValue();
var folders = DriveApp.getFoldersByName(NAME);
while (folders.hasNext()) {
folder = folders.next();
if(folder.getName()==NAME){
return folder;
}
}
var parentFolder=DriveApp.getFolderById("1234");
return parentFolder.createFolder(NAME);
}
我认为您的值数组中缺少一个级别,您需要在获取值之前将 e
转换为 range
。请记住电子表格总是有二维数组。
我在编辑时将空白电子表格中的以下代码设置为 运行,并将值带入单元格 a1
和 b1
。它有过多的变量只是为了说明正在发生的事情。您显然可以减少这些,但最终我认为这会让您获得您正在寻找变量 Timestamp
和 NAME
.
/**
* @OnlyCurrentDoc
*/
const mySS = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
function onEdit(e){
var theRange = e.range;
var allValues = theRange.getValues();
var singleRowValues = allValues[0];
var firstColumnofRowValue = singleRowValues[0];
var secondColumnofRowValue = singleRowValues[1];
var Timestamp = firstColumnofRowValue;
var NAME = secondColumnofRowValue;
//Test Output
mySS.getRange("A1").offset(0,0,1,2).setValues([[Timestamp,NAME]]);
}