【发布时间】: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