validation - 让脚本从具有多个选项卡的工作表中的下拉菜单运行
问题描述
希望我在正确的地方。我正在制定维护计划,但遇到了一些麻烦。我所拥有的是在工作表中创建的工作订单表,我编写了一个脚本,它将以新名称(与工作表中的单元格值绑定)保存模板的副本,驱动器上的文件夹。我也有这个脚本在谷歌日历上安排工作订单。此代码如下。
function Create() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); // Get spreadsheet
var id = ss.getId(); // Get spreadsheet ID
var sstocopy = DriveApp.getFileById(id); //Get spreadsheet with DriveApp
var sheet = ss.getActiveSheet(); // Grab the sheet in order to find the name of the new spreadsheet
to be created
var sheet_name = sheet.getRange("C4").getValue(); // Get the value, in this case: Project Urn
var folder = DriveApp.getFolderById("1D9gWUuHTPbWkzpSOp5vQdg-K8N6kUGo6"); // Get the folder where
the sheet needs to be placed.
sstocopy.makeCopy(sheet_name,folder); // Make the copy of the sheet in that folder.
var eventCal =
CalendarApp.getCalendarById("c_4um01s3eqvq7d5kqi0ga4i1098@group.calendar.google.com") ;
var eventname = sheet_name;
var eventstart = sheet.getRange("E3").getValue();
var eventstop = sheet.getRange("E4").getValue();
eventCal.createAllDayEvent(eventname, eventstart, eventstop);
}
现在这段代码运行良好,我最初在工作表上有一个可点击的按钮来运行这段代码,并且在计算机上运行良好。棘手的部分是我希望能够从 Ipad 的移动应用程序中运行它。所以我一直在尝试设置一个下拉菜单来运行脚本。我的工作表文件有几个页面/标签,我认为这是给我带来问题的原因。我假设我需要调用正确的工作表,但我似乎无法让它工作。
我尝试的第一个代码是这个(除了我的下拉菜单在 F3 中)
function onEdit(e) {
if (e.range.getA1Notation() == 'A1') {
if (/^\w+$/.test(e.value)) {
eval(e.value)();
e.range.clear();
}
}
}
但我收到 e.range.getA1Notation 的未定义错误。我尝试了其他一些事情,但我真的不知道自己在做什么,因为我的理解非常基础,而且我已经很长时间没有真正做过这样的事情了。任何帮助,将不胜感激。
解决方案
这是您可以使用复选框作为按钮来运行功能的一种方法。为此,我使用了一个可安装的 onEdit(e) 触发器,以便它可以执行需要权限的功能。
function onMyEdit(e) {
e.source.toast('Entry');
console.log(JSON.stringify(e));//use this to see all of the features in the event object
const sh=e.range.getSheet();
if(sh.getName()=="Your Sheet Name" && e.range.columnStart==1 && e.value=="TRUE" ) {
e.range.setValue('FALSE');
switch(e.range.rowStart) {
case 1:
e.source.toast('function 1');
break;
case 2:
e.source.toast('function 2');
}
}
}
我没有附加任何功能,我的想法是我有 e.source.toast('function 1'); 您将用函数调用替换整行。这被设置为只运行一页,但如果需要可以修改。
动画:
如您所见,它可以设置为每次重置复选框,而不是显示您选择的功能的吐司。您始终可以在函数名称的复选框旁边放置标签。
而这个例子使用数据验证来创建一个下拉函数选择过程。重要的是要记住 onEdit() 函数必须在 30 秒内完成。
function onMyEdit(e) {
e.source.toast('Entry');
console.log(JSON.stringify(e));
const sh=e.range.getSheet();
if(sh.getName()=="Your Sheet Name" && e.range.columnStart==1 && e.value=="TRUE" ) {
e.range.setValue('FALSE');
switch(e.range.rowStart) {
case 1:
e.source.toast('function 1');
break;
case 2:
e.source.toast('function 2');
}
}
if(sh.getName()=="Your Sheet Name" && e.range.columnStart==2 && e.range.rowStart==1 && e.value) {
switch(e.value) {
case '1':
e.source.toast('function 1');
break;
case '2':
e.source.toast('function 2');
}
e.range.setValue('');
}
}
动画:
推荐阅读
- reactjs - gatsby-plugin-transition-link AniLink 无法构建
- laravel - 使用 Laravel 和 Vue.js 绑定到多个类名
- sockets - 如何在向量 uint8_t 中传递 argv
- python - 熊猫:如何将数据框插入 Clickhouse
- ms-word - Iterating over all paragraphs with content controls with Office Javascript API
- flutter - tapping prefixIcon of TextField causes TextField to be focussed
- asp.net-core - 优雅关闭 asp.net 核心
- scala - 定义列表中的数字是否小于参数中的一 - Scala
- python - Read in record of multiple lines from file into nested dictionary in python
- php - 如何在数组php中使用一个数组两次?