我试图在我的工作表中创建一个依赖的下拉列表,在Col A中,它将允许您选择区域列表(例如。美洲、非洲、亚洲)等,然后在Col B中显示在Col A中选择的该地区国家的列表。
我尝试使用=间接和=索引/匹配公式,但它们对我超过1000行的工作表不起作用。
我的工作簿中有11个选项卡,但是我只想将数据从“国家”选项卡拉到“主呼叫表”选项卡进行验证。所有其他选项卡都是从主工作表中删除的。
在countries(国家)选项卡中,我列出了第2行A栏中的地区以及B栏中的相应国家,因此如下所示:
非洲加纳,亚洲。日本
等等。
在我的主调用选项卡中,我在顶部有切片器等,所以数据输入只从第9行开始。
我尝试了下面的脚本,但没有成功:
var mainWsName = "Master Calls Sheet";
var optionsWsName = "countries";
var firstLevelColumn = 1;
var secondLevelColumn = 2;
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mainWsName");
var wsOptions = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("optionsWsName");
var options = wsOptions.getRange(2, 1,wsOptions.getLastRow()-1,2).getValues();
function myFunction() {
function onEdit(e){
var activeCell = e.range;
var val = activeCell.getValue();
var r = activeCell.getRow();
var c = activeCell.getColumn();
var wsName = activeCell.getSheet().getName();
if(wsName == "mainWsName" && c === firstLevelColumn && r > 8){
var filteredOptions = options.filter(function(o){ return o[0] === val });
var listToApply = filteredOptions.map(function(o){ return o[1] });
var cell = ws.getRange(r, 2);
applyValidationToCell(listToApply,cell)
}
}}
function applyValidationToCell(list,cell){
var rule = SpreadsheetApp
.newDataValidation()
.requireValueInList(list)
.setAllowInvalid(false)
.build;
cell.setDataValidation(rule)
}
有人能帮忙吗?!?
您可以使用以下由两个函数组成的脚本来实现所需的功能:createDropdown()
和onEditTrigger(e)
。
var ss = SpreadsheetApp.getActiveSpreadsheet()
var master = ss.getSheetByName("Master Calls Sheet");
var countries = ss.getSheetByName("countries");
var options = countries.getRange(2, 1,countries.getLastRow()-1,2).getValues();
var continentsList = ['Americas','Africa','Asia'];
如果要将其他大陆添加到函数中,则只需更改var colontslist
变量。
createDropdown()
函数:function createDropdown() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var rangeRule = SpreadsheetApp.newDataValidation().requireValueInList(continentsList,true).build();
ss.getRange('A9').setDataValidation(rangeRule);
}
上述功能用于创建包含所有大陆的下拉列表,并将在主调用表的
A9单元格上创建该下拉列表。
onEditTrigger(e)
函数:
function onEditTrigger(e) {
var countries = e.range.getSheet();
var cellValue = e.range.getValue();
var k =0;
for (k=0; k<continentsList.length;k++) {
if (cellValue == continentsList[k]) {
countries.getRange("B9:B").clear();
var j=0;
for (var i=0; i<options.length; i++)
if (options[i][0]== continentsList[k]) {
j++;
countries.getRange(j+8,2).setValue(options[i][1]);
}
}
}
}
上面的函数是一个可安装的触发器,这意味着每次下拉列表中的值被更改时,它都会触发。它的工作原理是循环遍历
ContinentsList
,并检查每次迭代的值是否与从下拉列表中选择的值相对应。如果值对应,则列出每个大陆的国家。
这些值将出现在
B列
上,从主调用表
上的B9
开始。
应使用以下属性设置触发器:
此外,我建议您查看以下链接,因为它们可能对您未来的发展有所帮助:
>
数据验证类。
我正在重新创建和扩展我以前制作的文档。我已经引入了我最初使用的脚本,并在我认为合适的地方对其进行了调整,以使其在本表中正常工作,但我一定错过了一些东西。可在此处找到涉及的3个电子表格文件的可编辑示例。这些文件是一个样本“价目表”、“目录”(它汇总了所有价目表中的制造商名称,还有一个“目录”选项卡,用于我的一个主要供应商未销售的杂项物品),以及“附录B”,这是我需要帮助的文件。 这份文件是我合同的增
我有一个电子表格从谷歌表单收集我的表单回复。 附在这张纸上的是一个脚本,它将每一行都拉出,进行一些计算,并将结果放入另一张纸中。我不是每次都复制整张表,而是用下面的代码拉两张表的增量: 问题是,我还将过滤器应用于接收工作表,并且每当我插入任何新数据时,过滤器范围都不会更新。 有什么办法可以让我绕过这件事吗?作为上面更新函数的一部分,我能否以编程方式更新过滤器范围?
我试图使用一个谷歌脚本,从检索2个证券字段,并将输出保存到Google Sheet文件。我还需要脚本将datetime添加到工作表的第一列。 我创建了一个包含3列的基本Google工作表: A的格式为DateTime。第1行中有列名称date,第2行之后为空 以下是我的功能: 以下是输出: C和D列的输出正确。A列输出错误。每次我运行该函数时,每一行都会在最后一行的上方添加: 我第一次运行该函数是
如何让子类别列根据在google sheets的主类别下拉列表中选择的值填充下拉列表? 我谷歌了一下,找不到任何好的解决方案,所以我想分享我自己的。请看下面我的回答。
在谷歌工作表上,尝试根据特定单元格中的值隐藏/取消隐藏行,并尝试在AppsScript中为此编写脚本。发现一个隔离工作(如果B55=NO,则隐藏64行): 但我需要对多个单元格和多行使用相同的方法,只要我展开它,就只有代码的最后一部分有效,而不是第一部分: 从这里开始,B121号牢房开始工作,但我的B55停止工作。有什么提示吗?谢谢!
我写了一些代码,应该在显示“分支”的一列中使用一个值,并在此基础上更改“分配给OE”中的下拉菜单(对于上下文,OE是员工),因此可以从下拉列表中选择OE名称,基于他们所在的分支。该列表将仅显示来自相应分支机构的员工。 这是我的电子表格副本,清除了不相关的列:https://docs.google.com/spreadsheets/d/1dzTYQL1YPX6z6qtV4_tNl4ntBMLqcMQ