在复选框的帮助下添加日历事件
Add calendar event with the help of checkbox
参考这个问题 -
全部修改后的代码:
function onOpen() {
SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
.addItem(' Set up ...', 'myTriggerSetup')
.addToUi();
}
function myTriggerSetup() {
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId()
if (!isTrigger('onSpeEdit')) {
ScriptApp.newTrigger('onSpeEdit').forSpreadsheet(ssID).onEdit().create();
}
}
function isTrigger(funcName) {
var r = false;
if (funcName) {
var allTriggers = ScriptApp.getProjectTriggers();
var allHandlers = [];
for (var i = 0; i < allTriggers.length; i++) {
allHandlers.push(allTriggers[i].getHandlerFunction());
}
if (allHandlers.indexOf(funcName) > -1) {
r = true;
}
}
return r;
}
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 57 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(spreadsheet.getRange('U70').getValue()).getTime();
var end = new Date(spreadsheet.getRange('X69').getValue()).getTime();
var name = spreadsheet.getRange('U69').getValue()
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}
我的要求:
用户将填写所有 3 个单元格以获取事件详细信息。然后,他们将在复选框上打勾,应该添加事件,并且复选框也应该取消勾选。然后,另一个用户将再次执行相同的过程。
我的问题:
它在虚拟 sheet 中工作,但在主 sheet.My 中不工作,上面的代码是按照主 sheet.
虚拟 Sheet: https://docs.google.com/spreadsheets/d/1_f_dujqIvmkXXLAqyandEmrWOxgskIfk9KTSKw28UuA/edit#gid=0
谢谢:
谢谢 Mike 和 Tanaike 为帮助我所做的惊人努力。
1。按如下方式重命名您的函数名称。
在这种情况下,您还可以使用除onEdit
之外的其他函数名称。关于这个的原因,大家可以在.
看到
function installedOnEdit(e){
var rg = e.range;
if(rg.getA1Notation() === "Z56" && rg.isChecked() && rg.getSheet().getName() === "Course"){
calendar(); //calling calendar function
rg.uncheck()
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course').getRange('X57').setValue('Event has been added to your Calendar')//Putting message in cell x57;
}
}
2。将可安装的 OnEdit 触发器安装到重命名的函数。
您可以在 the official document 查看如何手动安装它。
如果需要使用脚本,也可以使用以下脚本。
function installTrigger() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
ScriptApp.newTrigger("installedOnEdit").forSpreadsheet(ss).onEdit().create();
}
通过此流程,installedOnEdit
由可安装的 OnEdit 触发器 运行。当您使用它时,请勾选复选框。这样,installedOnEdit
就是 运行 而 CalendarApp.getDefaultCalendar()
就是 运行。
注:
- 在这种情况下,它假定您的
calendar()
和 onEdit
中的 if 语句工作正常。请注意这一点。
参考:
已添加:
我看到了您提供的示例电子表格。当我看到它时,“名称”、“开始日期”、“结束日期”、“添加到日历”的值是单元格“B1:B4”。但在您的脚本中,这些值未被使用。我认为你的新问题是由于这个。请使用示例电子表格修改您的脚本,如下所示。
修改后的脚本:
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(spreadsheet.getRange('B2').getValue()).getTime();
var end = new Date(spreadsheet.getRange('B3').getValue()).getTime();
var name = spreadsheet.getRange('B1').getValue()
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
}
function installedOnEdit(e) {
var rg = e.range;
if (rg.getA1Notation() === "B4" && rg.isChecked() && rg.getSheet().getName() === "Course") {
calendar(); //calling calendar function
rg.uncheck();
}
}
function installTrigger() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
ScriptApp.newTrigger("installedOnEdit").forSpreadsheet(ss).onEdit().create();
}
- 在这种情况下,当
installTrigger()
安装可安装的 OnEdit 触发器时,选中单元格“B4”的复选框时,将创建事件。
试试这个
function onOpen() {
SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
.addItem(' Set up ...', 'myTriggerSetup')
.addToUi();
}
function myTriggerSetup() {
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId()
if (!isTrigger('onSpeEdit')) {
ScriptApp.newTrigger('onSpeEdit').forSpreadsheet(ssID).onEdit().create();
}
}
function isTrigger(funcName) {
var r = false;
if (funcName) {
var allTriggers = ScriptApp.getProjectTriggers();
var allHandlers = [];
for (var i = 0; i < allTriggers.length; i++) {
allHandlers.push(allTriggers[i].getHandlerFunction());
}
if (allHandlers.indexOf(funcName) > -1) {
r = true;
}
}
return r;
}
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 4 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(rg.offset(-2,0).getValue()).getTime();
var end = new Date(rg.offset(-1,0).getValue()).getTime();
var name = rg.offset(-3,0).getValue();
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}
参考这个问题 -
全部修改后的代码:
function onOpen() {
SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
.addItem(' Set up ...', 'myTriggerSetup')
.addToUi();
}
function myTriggerSetup() {
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId()
if (!isTrigger('onSpeEdit')) {
ScriptApp.newTrigger('onSpeEdit').forSpreadsheet(ssID).onEdit().create();
}
}
function isTrigger(funcName) {
var r = false;
if (funcName) {
var allTriggers = ScriptApp.getProjectTriggers();
var allHandlers = [];
for (var i = 0; i < allTriggers.length; i++) {
allHandlers.push(allTriggers[i].getHandlerFunction());
}
if (allHandlers.indexOf(funcName) > -1) {
r = true;
}
}
return r;
}
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 57 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(spreadsheet.getRange('U70').getValue()).getTime();
var end = new Date(spreadsheet.getRange('X69').getValue()).getTime();
var name = spreadsheet.getRange('U69').getValue()
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}
我的要求:
用户将填写所有 3 个单元格以获取事件详细信息。然后,他们将在复选框上打勾,应该添加事件,并且复选框也应该取消勾选。然后,另一个用户将再次执行相同的过程。
我的问题:
它在虚拟 sheet 中工作,但在主 sheet.My 中不工作,上面的代码是按照主 sheet.
虚拟 Sheet: https://docs.google.com/spreadsheets/d/1_f_dujqIvmkXXLAqyandEmrWOxgskIfk9KTSKw28UuA/edit#gid=0
谢谢: 谢谢 Mike 和 Tanaike 为帮助我所做的惊人努力。
1。按如下方式重命名您的函数名称。
在这种情况下,您还可以使用除onEdit
之外的其他函数名称。关于这个的原因,大家可以在
function installedOnEdit(e){
var rg = e.range;
if(rg.getA1Notation() === "Z56" && rg.isChecked() && rg.getSheet().getName() === "Course"){
calendar(); //calling calendar function
rg.uncheck()
SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course').getRange('X57').setValue('Event has been added to your Calendar')//Putting message in cell x57;
}
}
2。将可安装的 OnEdit 触发器安装到重命名的函数。
您可以在 the official document 查看如何手动安装它。
如果需要使用脚本,也可以使用以下脚本。
function installTrigger() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
ScriptApp.newTrigger("installedOnEdit").forSpreadsheet(ss).onEdit().create();
}
通过此流程,installedOnEdit
由可安装的 OnEdit 触发器 运行。当您使用它时,请勾选复选框。这样,installedOnEdit
就是 运行 而 CalendarApp.getDefaultCalendar()
就是 运行。
注:
- 在这种情况下,它假定您的
calendar()
和onEdit
中的 if 语句工作正常。请注意这一点。
参考:
已添加:
我看到了您提供的示例电子表格。当我看到它时,“名称”、“开始日期”、“结束日期”、“添加到日历”的值是单元格“B1:B4”。但在您的脚本中,这些值未被使用。我认为你的新问题是由于这个。请使用示例电子表格修改您的脚本,如下所示。
修改后的脚本:
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(spreadsheet.getRange('B2').getValue()).getTime();
var end = new Date(spreadsheet.getRange('B3').getValue()).getTime();
var name = spreadsheet.getRange('B1').getValue()
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
}
function installedOnEdit(e) {
var rg = e.range;
if (rg.getA1Notation() === "B4" && rg.isChecked() && rg.getSheet().getName() === "Course") {
calendar(); //calling calendar function
rg.uncheck();
}
}
function installTrigger() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
ScriptApp.newTrigger("installedOnEdit").forSpreadsheet(ss).onEdit().create();
}
- 在这种情况下,当
installTrigger()
安装可安装的 OnEdit 触发器时,选中单元格“B4”的复选框时,将创建事件。
试试这个
function onOpen() {
SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
.addItem(' Set up ...', 'myTriggerSetup')
.addToUi();
}
function myTriggerSetup() {
var ssID = SpreadsheetApp.getActiveSpreadsheet().getId()
if (!isTrigger('onSpeEdit')) {
ScriptApp.newTrigger('onSpeEdit').forSpreadsheet(ssID).onEdit().create();
}
}
function isTrigger(funcName) {
var r = false;
if (funcName) {
var allTriggers = ScriptApp.getProjectTriggers();
var allHandlers = [];
for (var i = 0; i < allTriggers.length; i++) {
allHandlers.push(allTriggers[i].getHandlerFunction());
}
if (allHandlers.indexOf(funcName) > -1) {
r = true;
}
}
return r;
}
function onSpeEdit(e) {
var rg = e.range;
if (rg.getRow() == 4 && rg.isChecked() && rg.getSheet().getName() === "Course") {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var start = new Date(rg.offset(-2,0).getValue()).getTime();
var end = new Date(rg.offset(-1,0).getValue()).getTime();
var name = rg.offset(-3,0).getValue();
var calend = CalendarApp.getDefaultCalendar();
calend.createEvent(name, new Date(start), new Date(end));
rg.uncheck();
}
}