【发布时间】:2019-02-18 01:21:45
【问题描述】:
我是谷歌表格编程的新手。我找到了创建自定义菜单的代码,并用它来隐藏工作表中的特定列(菜单选择允许用户选择谷歌工作表中数据的特定视图,而无法编辑原始数据)。隐藏列后,我想根据特定列(票证类型)中的值对数据使用过滤器。我不知道如何让过滤器的代码在隐藏列后运行。我尝试了许多变体(包括引用第二个函数)并在函数中查找函数,但没有成功找到解决方案。我想我可以过滤类似于隐藏列,但它不起作用。关于如何使其工作的建议?
function showReservationView() {
{
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
showAll();
sheet.hideColumn(sheet.getRange("B1:F1"));
sheet.hideColumn(sheet.getRange("H1"));
sheet.hideColumn(sheet.getRange("K1:U1"));
sheet.hideColumn(sheet.getRange("W1:Z1"));
sheet.hideColumn(sheet.getRange("AB1:AK1"));
sheet.hideColumn(sheet.getRange("AM1"));
sheet.hideColumn(sheet.getRange("AO1:AP1"));
sheet.hideColumn(sheet.getRange("AR1:BC1"));
sheet.hideColumn(sheet.getRange("BE1:BR1"));
}
function setFilter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var filterSettings = {};
filterSettings.range = {
sheetId: ss.getActiveSheet().getSheetId()
};
// Criteria for showing/hiding rows in a filter
// https://developers.google.com/sheets/api/reference/rest/v4/FilterCriteria
filterSettings.criteria = {};
var columnIndex = 7;
filterSettings['criteria'][columnIndex] = {
'hiddenValues': [
"EARLY BIRD - Top Tier Full Week Residential Pass",
"Top Tier Full Week Residential Pass",
"GROUP DISCOUNT - Top Tier Full Week Residential Pass",
"EARLY BIRD - Middle Tier Residential Pass",
"Middle Tier Residential Pass",
"GROUP DISCOUNT - Middle Tier Residential Pass",
"EARLY BIRD - Courtyard Room Pass",
"Courtyard Room Pass",
"GROUP DISCOUNT - Courtyard Room Pass",
"Non-Residential Week Pass",
"GROUP DISCOUNT - Non-Residential Week Pass",
"Indian Citizen Week Pass",
"Day Pass",
"Donation to the Swami Shukdevanand Trust",
"Teacher/Presenter Ticket",
"Sevak Ticket",
"Infant Ticket",
"Media Day Pass",
"Media Non-Residential Week Pass",
"Media Residential Week Pass",
"Special Guest Residential Pass"
]
};
var request = {
"setBasicFilter": {
"filter": filterSettings
}
};
Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId());
}
}
【问题讨论】:
-
什么不起作用?究竟如何“不工作”?仅仅说“它不起作用”不是一个有效的问题描述。为您所做的每次尝试提供错误消息和与预期行为不同的详细描述。这表明您努力寻找解决方案。您还应该提供您为解决问题所做的研究的证据。您说您找到了执行此操作的代码 - 为什么不引用实际作者?
-
请注意,您在其他函数的定义中定义了过滤器函数。虽然有效,但这意味着您不能在除
showReservationView之外的任何其他代码中使用您的setFilter函数,因为它不在脚本项目的全局命名空间中 -
你好。感谢您的反馈和问题。对于自定义菜单,我使用了这个链接:webapps.stackexchange.com/questions/82666/…。我根据需要修改了菜单名称和要隐藏的列。该功能工作正常。我可以根据从自定义菜单中选择的菜单隐藏不同的列集。下一步是我想根据票证类型应用过滤器:sites.google.com/site/scriptsexamples/learn-by-example/…。
-
我使用了来自这个谷歌链接的代码:sites.google.com/site/scriptsexamples/learn-by-example/…。我意识到这是第二个过滤器。所以,这些是我的引文。
-
SetFilter 函数在另一个函数中设置 - 并且没有运行。列隐藏得很好,但过滤器不适用。我现在还可以,过滤器功能只运行 1 个视图。我无法找到在另一个函数中运行函数的任何引用。
标签: google-apps-script filter google-sheets