【发布时间】:2021-08-11 22:23:46
【问题描述】:
我有一个看似相对简单的任务,但似乎无法弄清楚。我编写了一个脚本,在提交表单时创建一个日历事件。我们将不再使用表单(改为移至 AppSheet),因此,我需要触发器仅在添加新行时触发。我相信“onChange”是解决这个问题的方法,但我只希望脚本在添加一行时运行,而不是在编辑、删除或以任何其他方式更改时运行。有什么建议吗?
// Create Calendar Event From Spreadsheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
// Calendar to output requests
var calendar = CalendarApp.getCalendarById('youremail@gmail.com');
// Creates an object from the last row
function getSubmission() {
this.timestamp = sheet.getRange(lastRow, 1).getValue();
this.accountNumber = sheet.getRange(lastRow, 2).getValue();
this.contactLastName = sheet.getRange(lastRow, 3).getValue();
this.contactFirstName = sheet.getRange(lastRow, 4).getValue();
this.contactPhoneNumber = sheet.getRange(lastRow, 5).getValue();
this.contactEmail = sheet.getRange(lastRow, 6).getValue();
this.userLastName = sheet.getRange(lastRow, 7).getValue();
this.userFirstName = sheet.getRange(lastRow, 8).getValue();
this.userPhoneNumber = sheet.getRange(lastRow, 9).getValue();
this.userEmail = sheet.getRange(lastRow, 10).getValue();
this.streetAddress = sheet.getRange(lastRow, 11).getValue();
this.city = sheet.getRange(lastRow, 12).getValue();
this.state = sheet.getRange(lastRow, 13).getValue();
this.zipCode = sheet.getRange(lastRow, 14).getValue();
this.type = sheet.getRange(lastRow, 15).getValue();
this.equipment = sheet.getRange(lastRow, 16).getValue();
this.typeOfLead = sheet.getRange(lastRow, 17).getValue();
this.sourceOfLead = sheet.getRange(lastRow, 18).getValue();
this.notes = sheet.getRange(lastRow, 19).getValue();
this.date = new Date(sheet.getRange(lastRow, 20).getValue());
this.appointmentStart = sheet.getRange(lastRow, 21).getValue();
this.appointmentEnd = sheet.getRange(lastRow, 22).getValue();
this.direction = sheet.getRange(lastRow, 23).getValue();
this.callOnWay = sheet.getRange(lastRow, 24).getValue();
return this;
}
// Creates a calendar event using the last row
function updateCalendar(request) {
request.date.setHours(request.appointmentStart.getHours());
request.date.setMinutes(request.appointmentStart.getMinutes());
var endTime = new Date(request.date);
endTime.setHours(request.appointmentEnd.getHours());
endTime.setMinutes(request.appointmentEnd.getMinutes())
var event = calendar.createEvent(
request.state + " " + request.direction + " EST " + request.contactLastName + ", " + request.contactFirstName + " " + request.callOnWay,
request.date,
endTime
)
.setLocation(request.streetAddress + " " + request.city + ", " + request.state + " " + request.zipCode
)
.setDescription("Account # " + request.accountNumber + "\n" + "\n" + request.contactFirstName + " " + request.contactLastName + "\n" + request.contactPhoneNumber + "\n" + request.contactEmail + "\n" + "\n" + "Notes: " + request.type + " - " + request.equipment + ". " + request.notes + ".\n" + "Lead: " + request.typeOfLead + " - " + request.sourceOfLead + "." + "\n" + "\n" + "Jim: Scanned:____ " + "Inv. Adj:____ " + "QB:____ " + "Est. SL:____" + "\n" + "\n" + "Tracy: QB:____" + " Scan:____" + " Letter:____" + " Lead Sheet:____" + " Ref. Check #:____"
)
}
// --------------Main--------------
function main() {
var request = getSubmission();
updateCalendar(request);
}
【问题讨论】:
-
如果是谷歌表单,你应该使用onFormSubmit而不是onChange。如果您使用的是自定义 HTML 表单,最好在之后立即创建事件
-
ArtiBucco,我使用的是 onFormSubmit,但现在不再使用了,因为不会通过谷歌表单接收提交。我只需要在添加新行时触发脚本。
标签: google-apps-script triggers