当前位置: 首页 > 知识库问答 >
问题:

使用谷歌应用程序脚本的动态依赖下拉列表不工作-Google Sheets

鲜于峰
2023-03-14

我写了一些代码,应该在显示“分支”的一列中使用一个值,并在此基础上更改“分配给OE”中的下拉菜单(对于上下文,OE是员工),因此可以从下拉列表中选择OE名称,基于他们所在的分支。该列表将仅显示来自相应分支机构的员工。

这是我的电子表格副本,清除了不相关的列:https://docs.google.com/spreadsheets/d/1dzTYQL1YPX6z6qtV4_tNl4ntBMLqcMQYoPcw6cKuyAw/edit?usp=sharing

销售订单表的A列是我希望下拉列表的位置,在每一行中,OE名称表是OE(员工)列表的位置,下拉列表应该由这些列填充,具体取决于分支机构。

我写的剧本是:

function onEdit() {

var app = SpreadsheetApp;
var ss = app.openById("1UM[MASK]0M");
var OEsheet = ss.getSheetByName("OE names");
var SOsheet = ss.getSheetByName("Sales Order");
var activeCell = SOsheet.getActiveCell();

if(activeCell.getColumn() == 1 && activeCell.getRow() > 1 && ss.getSheetName() == SOsheet) {

  activeCell.offset(0, 1).clearContent().clearDataValidations();

  var OEnames = OEsheet.getRange(1, 1, 1, OEsheet.getLastColumn()).getValues();

  var OEnamesIndex = OEnames[0].indexOf(activeCell.getValue()) + 1;

  if(OEnamesIndex != 0){
 var validationRange = OEsheet.getRange(2, OEnamesIndex, OEsheet.getLastRow());
 var validationRule = app.newDataValidation().requireValueInRange(validationRange).build();

  activeCell.offset(0, -6).setDataValidation(validationRule);

}

}
}

这个脚本似乎没有任何作用,但我不明白为什么。

谢谢你

共有1个答案

唐伟
2023-03-14

以下是你可能想要解决的一些问题:

(1) 这一行指向演示表以外的表。也许这是您的主工作表的ID。我建议在这篇文章中屏蔽它

var ss = app.openById("1UM[MASK]0M");

我建议使用以下方法,以便复制工作表不会破坏代码:

var ss = SpreadsheetApp.getActiveSpreadsheet();

(2)在下面一行中,您将“工作表名称”与“工作表对象”进行比较。

if(activeCell.getColumn() == 1 && activeCell.getRow() > 1 && ss.getSheetName() == SOsheet) {

相反,请尝试:

if(activeCell.getColumn() == 1 && activeCell.getRow() > 1 && ss.getSheetName() == "Sales Order") {

(3) 根据if语句,活动单元格的列为1。但是这一行试图将列偏移-6列,这是不可能的。

activeCell.offset(0, -6).setDataValidation(validationRule);

也许你的意思是:

activeCell.offset(0, 1).setDataValidation(validationRule);
 类似资料:
  • 我已经创建了一个基于本教程的依赖下拉列表的谷歌表。我创建的工作表的副本。我对依赖下拉列表的功能很满意,但是我的目标是从“材料”表(列B: I)中复制一行中的所有数据,这些数据对应于从列E中的依赖下拉列表中选择的选项"crop_specific"表,将此信息复制到列E: L。我想保留当前脚本的功能,如果从D列中选择的内容发生更改,则清除E列中的内容,并将其扩展到整个行。任何帮助都将不胜感激。脚本的代

  • 在谷歌工作表上,尝试根据特定单元格中的值隐藏/取消隐藏行,并尝试在AppsScript中为此编写脚本。发现一个隔离工作(如果B55=NO,则隐藏64行): 但我需要对多个单元格和多行使用相同的方法,只要我展开它,就只有代码的最后一部分有效,而不是第一部分: 从这里开始,B121号牢房开始工作,但我的B55停止工作。有什么提示吗?谢谢!

  • 我试图在我的工作表中创建一个依赖的下拉列表,在Col A中,它将允许您选择区域列表(例如。美洲、非洲、亚洲)等,然后在Col B中显示在Col A中选择的该地区国家的列表。 我尝试使用=间接和=索引/匹配公式,但它们对我超过1000行的工作表不起作用。 我的工作簿中有11个选项卡,但是我只想将数据从“国家”选项卡拉到“主呼叫表”选项卡进行验证。所有其他选项卡都是从主工作表中删除的。 在countr

  • 我正在重新创建和扩展我以前制作的文档。我已经引入了我最初使用的脚本,并在我认为合适的地方对其进行了调整,以使其在本表中正常工作,但我一定错过了一些东西。可在此处找到涉及的3个电子表格文件的可编辑示例。这些文件是一个样本“价目表”、“目录”(它汇总了所有价目表中的制造商名称,还有一个“目录”选项卡,用于我的一个主要供应商未销售的杂项物品),以及“附录B”,这是我需要帮助的文件。 这份文件是我合同的增

  • 在继续使用GoogleApps脚本构建Google电子表格的过程中,我已经完成了获取Bittrex和Poloniex余额的工作,但无法使用Cryptopia。 下面是我与Bittrex将JSON对象数组映射到字符串的斗争的链接 以下是官方API链接:https://www.cryptopia.co.nz/Forum/Thread/256 以下是一些例子: https://www.cryptopia

  • 通过SpreadsheetApp global,使用绑定到电子表格的应用程序脚本来影响工作表非常简单。但是,有一些功能,例如在工作表上获取/设置过滤器,只能从GoogleSheetsRESTAPI访问。 我见过一个例子,它使用应用程序脚本中的UrlFetchApp来调用谷歌工作表应用编程接口,但它的编写方式好像应用程序脚本实际上没有绑定到特定的电子表格。 当我试图从绑定到电子表格的应用程序脚本中调