gpt4 book ai didi

javascript - 根据不同的下拉菜单显示和隐藏行和列

转载 作者:行者123 更新时间:2023-12-02 21:10:02 26 4
gpt4 key购买 nike

我正在尝试创建一个“接收表单”作为 Google 工作表的一部分,该表单将根据不同下拉列表中的选择显示或隐藏行和列:

  1. 根据下拉列表中的选择隐藏/显示其他工作表上的列。

    • 如果“NamedRange1”中的下拉选项为“A”,则在其他工作表上显示第 3 列;
    • 在所有其他情况下(即空白或“B”时),隐藏其他工作表上的第 3 列;
  2. 根据下拉列表中的选择隐藏/显示同一工作表上的行。

    • 如果“NamedRange2”中的下拉菜单为"is",则显示第 15-19 行
    • 在所有其他情况下(即空白或“否”时),隐藏第 15-19 行
  3. 与上面相同,但下拉菜单和行不同。

    • 如果“NamedRange3”中的下拉菜单为"is",则显示第 26-40 行
    • 在所有其他情况下(即空白或“否”时),隐藏第 26-40 行

到目前为止我可以得到nr。 1 可以工作,但 2 或 3 不行...此外,我无法让它们在编辑表单时自动运行...

我对这一切都很陌生,因此我们将不胜感激:-)

这是我到目前为止的代码:

function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Start Here >>")
}

function HideColumns() {
var ss = SpreadsheetApp.getActive();
var name = ss.getRangeByName("NamedRange1");
var namevalue = name.getValue();

if (namevalue == "A") {
var sheet = ss.getSheetByName("Sheet 2");
sheet.showColumns(3);
}
else if (namevalue != "A") {
var sheet = ss.getSheetByName("Sheet 2");
sheet.hideColumns(3);
}
}

function HideRows() {
var ss = SpreadsheetApp.getActive();
var name = ss.getRangeByName("NamedRange2");
var namevalue = name.getValue();

if (namevalue == "Yes") {
var sheet = ss.getSheetByName("Sheet1");
sheet.showRows(15, 10);
}
else if (namevalue != "Yes") {
var sheet = ss.getSheetByName("Sheet1");
sheet.hideRows(15, 10);
}
}

function HideRows() {
var ss = SpreadsheetApp.getActive();
var name = ss.getRangeByName("NamedRange3");
var namevalue = name.getValue();

if (namevalue == "Yes") {
var sheet = ss.getSheetByName("Sheet1");
sheet.showRows(26, 15);
}
else if (namevalue != "Yes") {
var sheet = ss.getSheetByName("Sheet1");
sheet.hideRows(26, 15);
}
}

最佳答案

脚本流程:

  • 创建一个来为每组交互创建一个配置对象
  • 调用类的run方法来执行所需的操作

示例脚本:

假设命名的 Ranges1、2、3 位于“Start Here >>”工作表的 A1、B1 和 C1,

/**
* @param {GoogleAppsScript.Events.SheetsOnEdit} e
*/
const onEdit = e => {
const range = e.range;
if (range.getSheet().getName() !== 'Start Here >>') return;//exit if edit is not in Start Here >> sheet

class config {
/**
* @param {string} sheetToDo Sheet to act upon
* @param {string} func function to run on sheet
* @param {number} index Index of column/row to start desired action
* @param {number} num Number of Rows/Columns to hide/show
* @param {string} strToCheck The string to check against edited value
* @param {any} val edited value
*/
constructor(sheetToDo, func, index, num, strToCheck, val) {
this.sheetToDo = sheetToDo;
this.func = func;
this.index = index;
this.num = num;
this.switchFunc_(strToCheck === val);
}
run() {
SpreadsheetApp.getActive()
.getSheetByName(this.sheetToDo)
[this.func](this.index, this.num);
}
switchFunc_(toggle) {//To switch hide to show and viceversa
if (!toggle) {
const change = ['hide', 'show'];
this.func =
change[Number(!change.indexOf(this.func.slice(0, 4)))] +
this.func.slice(4);
}
}
}
const map = {
A1: val => new config('Sheet2', 'hideColumns', 3, 1, 'A', val),//if edit is in A1,
B1: val => new config('Sheet1', 'showRows', 15, 4, 'Yes', val),
C1: val => new config('Sheet1', 'showRows', 26, 15, 'Yes', val),
};
const createConfig = map[range.getA1Notation()];
if (createConfig) createConfig(e.value).run();
};

性能:

  • 如果编辑导致隐藏/显示行,则约 1-2 秒

引用文献:

关于javascript - 根据不同的下拉菜单显示和隐藏行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61124194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com