如何制作 google 应用程序脚本 - 日历 createEvent() 以接受来自使用数组公式填充的单元格的 GSheet 输入
How to make google app script - calendar createEvent() to accept GSheet inputs from cells populated using array formula
几天前,我得到了堆栈溢出的帮助,修改了我当时用于根据 google sheet 上的信息制作日历事件的应用程序脚本代码,以便在输入时勾选复选框从相应的行创建并随后仅在取消选中复选框时创建新事件。
function addEvent() {
let webinarCalendar = CalendarApp.getCalendarById("blablablablablabla@gmail.com");
let calendarSheet = SpreadsheetApp.getActiveSheet();
let schedule = calendarSheet.getDataRange().getValues();
schedule.splice(0, 1);
const k = 16; // colIndex of checkbok col
const created = schedule.map(e => [e[k]]);
schedule.forEach(function(entry, i) {
if (entry[k] == true) { return; }
webinarCalendar.createEvent(entry[3], entry[14], entry[15], {description: entry[13]});
created[i][0] = true;
});
calendarSheet.getRange(2, k + 1, created.length, 1).setValues(created);
}
直到 2 天前,我使用所需的输入更新了 4 个单元格中的 3 个以处理数组公式,以便在创建新行条目时自动填充它们,此当前代码工作正常。
应用程序脚本控制台上的错误显示:异常:参数 (String,String,String,(class)) 与 [=30= 的方法签名不匹配].
根据文档,此 createEvent() 所需的参数是标题(字符串)、开始时间(字符串)、结束时间(字符串)和描述(在 javascript object 中我认为 and 也是一个字符串)。为了确保数据类型在创建数组公式的过程中不会以某种方式发生变化,我使用 ISTEXT() 交叉检查了单元格,并且所有输入都返回了 TRUE .
我做的第二次尝试是将 splice() 从 (0,1) 更改为 (0,2) 以便它忽略第一行,其中数组公式写入单元格,也没有解决问题。
如果有人能告诉我导致这个问题的原因并帮助我解决它,我将不胜感激。
我不知道为什么它以前有效,但 startTime
和 endTime
应该是 Date
。
我检查过你的列是 String
。
参考:
对于尝试 运行 脚本的人来说,一个根本原因可能是日期格式为英国时您使用的是美国语言环境。
(例如,App 脚本查找的日期是 mm/dd/yyyy tt:tt:tt,但如果您单击公式单元格,它会显示为 dd/mm/yyyy tt:tt:tt)
您要做的是转到“文件”>“常规”>“区域设置”>“(选择的国家/地区)”>“保存设置”。
然后您将重新加载页面并尝试脚本是否在没有“无法找到方法 createEvent(string,string,string)”错误的情况下运行。
脚本中使用的代码行是:
SpreadsheetApp.getActive().setSpreadsheetLocale('en_UK');
您可以将其包含在您的 onOpen 触发器函数中。
几天前,我得到了堆栈溢出的帮助,修改了我当时用于根据 google sheet 上的信息制作日历事件的应用程序脚本代码,以便在输入时勾选复选框从相应的行创建并随后仅在取消选中复选框时创建新事件。
function addEvent() {
let webinarCalendar = CalendarApp.getCalendarById("blablablablablabla@gmail.com");
let calendarSheet = SpreadsheetApp.getActiveSheet();
let schedule = calendarSheet.getDataRange().getValues();
schedule.splice(0, 1);
const k = 16; // colIndex of checkbok col
const created = schedule.map(e => [e[k]]);
schedule.forEach(function(entry, i) {
if (entry[k] == true) { return; }
webinarCalendar.createEvent(entry[3], entry[14], entry[15], {description: entry[13]});
created[i][0] = true;
});
calendarSheet.getRange(2, k + 1, created.length, 1).setValues(created);
}
直到 2 天前,我使用所需的输入更新了 4 个单元格中的 3 个以处理数组公式,以便在创建新行条目时自动填充它们,此当前代码工作正常。
应用程序脚本控制台上的错误显示:异常:参数 (String,String,String,(class)) 与 [=30= 的方法签名不匹配].
根据文档,此 createEvent() 所需的参数是标题(字符串)、开始时间(字符串)、结束时间(字符串)和描述(在 javascript object 中我认为 and 也是一个字符串)。为了确保数据类型在创建数组公式的过程中不会以某种方式发生变化,我使用 ISTEXT() 交叉检查了单元格,并且所有输入都返回了 TRUE .
我做的第二次尝试是将 splice() 从 (0,1) 更改为 (0,2) 以便它忽略第一行,其中数组公式写入单元格,也没有解决问题。
如果有人能告诉我导致这个问题的原因并帮助我解决它,我将不胜感激。
我不知道为什么它以前有效,但 startTime
和 endTime
应该是 Date
。
我检查过你的列是 String
。
参考:
对于尝试 运行 脚本的人来说,一个根本原因可能是日期格式为英国时您使用的是美国语言环境。
(例如,App 脚本查找的日期是 mm/dd/yyyy tt:tt:tt,但如果您单击公式单元格,它会显示为 dd/mm/yyyy tt:tt:tt)
您要做的是转到“文件”>“常规”>“区域设置”>“(选择的国家/地区)”>“保存设置”。
然后您将重新加载页面并尝试脚本是否在没有“无法找到方法 createEvent(string,string,string)”错误的情况下运行。
脚本中使用的代码行是:
SpreadsheetApp.getActive().setSpreadsheetLocale('en_UK');
您可以将其包含在您的 onOpen 触发器函数中。