【问题标题】:Google Sheets - Issues with building template (hiding/unhiding rows, columns and tabs)Google 表格 - 构建模板的问题(隐藏/取消隐藏行、列和选项卡)
【发布时间】:2021-05-01 09:08:41
【问题描述】:

我有一个 Google 表格,用户必须通过从下拉列表中选择值来填写包含客户信息的表格。根据提供的信息,将隐藏/取消隐藏不同的选项卡、行和列,以便 Google 表格与特定客户项目相关。

这是客户信息表的示例,位于工作表 1 上: |客户姓名 |随机公司| | --------------- | ------------- | |客户级别? | 2 级 | |地理? |北美 | |范围内的销售? |是 | |签订合同?|是的|

我的模板目前有 3 个问题我想解决:

1.如何根据单元格中的值隐藏行?

我目前正在使用行号来隐藏不同工作表上的特定行,这很难维护,因为每个月都会添加/删除行。

if (n2=="No"){sh1.hideRows(125,9), sh5.hideRows(112,2)}else{sh1.showRows(125,9), sh5.showRows(112,2)}; 

if (n4=="No"){sh1.hideRows(112,13)}else{sh1.showRows(112,13)};

我更希望能够根据其中一列中的值隐藏/显示行。比如:

  • 如果下拉列表值为“北美”,则隐藏 A 列中所有没有“北美”的行 或
  • 如果下拉值为“否”,则隐藏 B 列中所有不包含“销售额”的行

2.隐藏/取消隐藏不同选项卡上的列。

使用我当前的代码,我似乎只能在一张纸上隐藏相关列。有没有办法使用此代码在多张纸上隐藏/显示该列?

if (n1=="Level 2"){sh1.showColumns(25), sh5.showColumns(25), sh9.showColumns(3)}else{sh1.hideColumns(25). sh5.hideColumns(25), sh9.hideColumns(3)}; //Show or hide Level 2 services

3.用户填写表格后,添加一个可点击的按钮来运行我的脚本。

我目前正在使用 onEdit(e) 函数来运行我的脚本。因此,当用户填写表格时,我的 Google 表格会更新,并且行/选项卡会被隐藏/取消隐藏。

我希望在表格 1 上有一个可点击的按钮,用户需要在完成客户信息表后点击该按钮。然后,这将运行我的脚本,用户会看到一个弹出框,说明模板已构建。

这可能吗?

这是我当前的代码,它使用了 onEdit 函数:

完全有可能我的代码完全是垃圾,但我对 App Script 很陌生,所以请与我裸露:-)

function onEdit(e) {
  const n1=e.source.getRangeByName("CustomerLevel").getValue();
  const n2=e.source.getRangeByName("Geography").getValue();
  const n3=e.source.getRangeByName("SalesScope").getValue(); 
  const n4=e.source.getRangeByName("ContractSigned").getValue();
  const sh1=e.source.getSheetByName("Sheet 1");
  const sh2=e.source.getSheetByName("Sheet 2");
  const sh5=e.source.getSheetByName("Sheet 5");
  const sh6=e.source.getSheetByName("Sheet 6");
  const sh9=e.source.getSheetByName("Sheet 7");
  if (n1=="Level 2"){sh1.showColumns(25), sh5.showColumns(25), sh9.showColumns(3)}else{sh1.hideColumns(25). sh5.hideColumns(25), sh9.hideColumns(3)}; //Show or hide Level 2 services
  if (n2=="North America"){sh1.hideRows(125,9), sh5.hideRows(112,2)}else{sh1.showRows(125,9), sh5.showRows(112,2)}; //Show or hide North America rows>>
  if (n3=="No"){sh1.hideSheet(), sh2.hideSheet()}else{sh1.showSheet(), sh2.showSheet()}; //Show or hide Sales sheets
  if (n4=="No"){sh1.hideRows(112,13)}else{sh1.showRows(112,13)}; //Show or hide contract rows>>

【问题讨论】:

  • 对于 onEdit 来说看起来有点复杂。我看不到您如何限制脚本不受未涉及工作表的所有编辑的影响。如果您打算一次为多个人使用它,我个人不会相信它。从您的代码的外观来看,我猜您可能还没有创建 web 应用程序,但这可能是我在这种情况下会使用的。

标签: google-apps-script google-sheets


【解决方案1】:

解决方案:

1.如何根据单元格中的值隐藏行?

您可以使用for循环逐行扫描指定范围并根据值显示/隐藏行:

样本数据:

示例代码:

function hideShow() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dropdownValue = sheet.getRange("A2").getValue();
  var lr = sheet.getLastRow();
  var dataValues = sheet.getRange(5,1,lr-4).getValues();
  for (var i=0; i<dataValues.length; i++) {
    if (dataValues[i] != dropdownValue) {
      sheet.hideRows(i+5);
    }
    else { 
      sheet.showRows(i+5); 
    }
  }
}

2。隐藏/取消隐藏不同选项卡上的列。

不同的代码指令需要分号分隔符:

if (n1 == "Level 2") {
  sh1.showColumns(25);
  sh5.showColumns(25); 
  sh9.showColumns(3); 
}
else {
  sh1.hideColumns(25); 
  sh5.hideColumns(25); 
  sh9.hideColumns(3);
}

3.用户填写表格后,添加一个可点击的按钮来运行我的脚本。

您可以使用Insert-&gt;Drawing 菜单绘制一个按钮,然后右键单击绘图,绘图内的... 选项并选择Assign Script。在我的第 1 项示例中:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    相关资源
    最近更新 更多