您可以编写一个测试函数,将模拟事件传递给您的触发函数。onEdit()
这是一个测试触发功能的示例。它传递一个事件对象,其中包含了解事件中“电子表格编辑事件”中描述的所有信息。
要使用它,请在目标onEdit
函数中设置断点,选择函数test_onEdit
并点击Debug
。
/**
* Test function for onEdit. Passes an event object to simulate an edit to
* a cell in a spreadsheet.
*
* Check for updates: https://stackoverflow.com/a/16089067/1677912
*
* See https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
*/
function test_onEdit() {
onEdit({
user : Session.getActiveUser().getEmail(),
source : SpreadsheetApp.getActiveSpreadsheet(),
range : SpreadsheetApp.getActiveSpreadsheet().getActiveCell(),
value : SpreadsheetApp.getActiveSpreadsheet().getActiveCell().getValue(),
authMode : "LIMITED"
});
}
如果你很好奇,这是为了测试Google SpreadsheetonEdit
的函数,以三个单元格为条件。
这是电子表格表单提交事件的测试函数。它通过读取表单提交数据来构建其模拟事件。这最初是为在 onFormSubmit 触发器中获取 TypeError 编写的?.
/**
* Test function for Spreadsheet Form Submit trigger functions.
* Loops through content of sheet, creating simulated Form Submit Events.
*
* Check for updates: https://stackoverflow.com/a/16089067/1677912
*
* See https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
*/
function test_onFormSubmit() {
var dataRange = SpreadsheetApp.getActiveSheet().getDataRange();
var data = dataRange.getValues();
var headers = data[0];
// Start at row 1, skipping headers in row 0
for (var row=1; row < data.length; row++) {
var e = {};
e.values = data[row].filter(Boolean); // filter: https://stackoverflow.com/a/19888749
e.range = dataRange.offset(row,0,1,data[0].length);
e.namedValues = {};
// Loop through headers to create namedValues object
// NOTE: all namedValues are arrays.
for (var col=0; col<headers.length; col++) {
e.namedValues[headers[col]] = [data[row][col]];
}
// Pass the simulated event to onFormSubmit
onFormSubmit(e);
}
}
提示
模拟事件时,请注意尽可能匹配记录的事件对象。
如果您希望验证文档,您可以从触发函数记录接收到的事件。
Logger.log( JSON.stringify( e , null, 2 ) );
在电子表格表单提交事件中:
- 所有 namedValues 值都是数组。
- 时间戳是字符串,它们的格式将本地化为表单的区域设置。如果从具有默认格式*的电子表格中读取,它们是 Date 对象。如果您的触发函数依赖于时间戳的字符串格式(这是一个坏主意),请注意确保正确模拟该值。
- 如果您的电子表格中有不在表单中的列,则此脚本中的技术将模拟包含这些附加值的“事件”,这不是您从表单提交中收到的内容。
- 如问题 4335中所述,
values
数组跳过空白答案(在“新表单”+“新工作表”中)。该filter(Boolean)
方法用于模拟这种行为。
*单元格格式的“纯文本”会将日期保留为字符串,这不是一个好主意。