【发布时间】:2021-12-17 09:11:33
【问题描述】:
几天来,我一直试图让一个简单的功能正常工作,但我看不出哪里出错了。非常感谢您能提供一些帮助。
背景: 我有一个日历选项卡,其中有一个表格,其中包含侧面的商店和顶部的日期。
当用户在 E7:AI200 之间点击时,我希望能够:
- 从第 1 列和单击的行中获取商店名称,然后用值填充 B1。
- 从第 1 行和单击的列中获取日期,并用值填充 C1。
这似乎工作正常。
我还希望电子表格在单击 E7:AI200 之间的单元格时自动导航到另一个名为“过滤的事件”的选项卡。
这似乎也可以正常工作。
问题:当我单击返回“日历”选项卡时,它似乎重新单击了原始单元格并将我直接导航回“过滤的事件”选项卡,我陷入了不断循环每次我尝试返回日历时都会在选项卡之间切换。
function onSelectionChange(e) {
var ss = SpreadsheetApp.getActive();
if (ss.getActiveSheet().getName() == "Calendar") {
var sheet = ss.getSheetByName("Calendar");
var full_range = sheet.getRange("A1:AI200");
var click_range = e.range;
var row_lookup = click_range.getRow();
var col_lookup = click_range.getColumn();
var selected_store = full_range.getCell(row_lookup, 1).getValue();
var selected_date = full_range.getCell(1, col_lookup).getValue();
var populate_store = sheet.getRange("B1");
var populate_date = sheet.getRange("C1");
if (row_lookup > 6 && row_lookup < 250 && col_lookup < 36 && col_lookup > 4) {
populate_store.setValue(selected_store);
populate_date.setValue(selected_date);
var change_sheet = ss.getSheetByName("Filtered Events");
change_sheet.activate();
}
else {
populate_store.setValue('');
populate_date.setValue('');
}
}
}
【问题讨论】:
-
也许,作为一种变通方法,您可以在“日历”表上选择一些“安全”单元格(例如 A1),并在其中一次单击后激活该单元格。在脚本开始时,您可以检查活动单元格是否为“A1”并且在这种情况下不执行任何操作。
-
另一种方法:您可以使用
PropertiesService.getScriptProperties().setProperty()保存最后单击的单元格的坐标,并在脚本开头使用PropertiesService.getScriptProperties().getProperty()进行检查。如果坐标相同,则什么也不做。示例在这里:stackoverflow.com/a/70374018/14265469 -
谢谢你——你能帮忙看看我的脚本中的样子吗?我很难知道如何实现它
-
我刚刚添加了如何使用
PropertiesService的示例。 -
为什么不直接使用复选框和 onEdit 触发器?
标签: google-apps-script google-sheets triggers