【问题标题】:How can I make this code shorter?, Data Validation我怎样才能使这段代码更短?,数据验证
【发布时间】:2022-11-09 10:02:27
【问题描述】:

请帮我缩短这段代码。 此代码适用于 L 列每个单元格中下拉列表的不同范围。我希望它可以工作到 L200

  • 对于单元格 L3 中的下拉菜单,范围为 (''Helper 2'!B1:P1')。
  • 对于单元格 L4 中的下拉菜单,范围为 (''Helper 2'!B2:P2')
  • 对于单元格 L5 中的下拉菜单,范围为 (''Helper 2'!B3:P3')

等等。

function wa() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('L3').activate();
  var currentCell = spreadsheet.getCurrentCell();
  spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
  currentCell.activateAsCurrentCell();
  spreadsheet.getRange('L3:L134').clearDataValidations();
  spreadsheet.getRange('L3').activate();
  spreadsheet.getRange('L3').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B1:P1'), true)
  .build());
  spreadsheet.getRange('L4').activate();
  spreadsheet.getRange('L4').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B2:P2'), true)
  .build());
  spreadsheet.getRange('L5').activate();
  spreadsheet.getRange('L5').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B3:P3'), true)
  .build());
  spreadsheet.getRange('L6').activate();
  spreadsheet.getRange('L6').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B4:P4'), true)
  .build());
  spreadsheet.getRange('L7').activate();
  spreadsheet.getRange('L7').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B5:P5'), true)
  .build());
  spreadsheet.getRange('L8').activate();
  spreadsheet.getRange('L8').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B6:P6'), true)
  .build());
  spreadsheet.getRange('L9').activate();
  spreadsheet.getRange('L9').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B7:P7'), true)
  .build());
  spreadsheet.getRange('L10').activate();
  spreadsheet.getRange('L10').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B8:P8'), true)
  .build());
  spreadsheet.getRange('L11').activate();
  spreadsheet.getRange('L11').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B9:P9'), true)
  .build());
  spreadsheet.getRange('L12').activate();
  spreadsheet.getRange('L12').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B10:P10'), true)
  .build());
  spreadsheet.getRange('L13').activate();
  spreadsheet.getRange('L13').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B11:P11'), true)
  .build());
  spreadsheet.getRange('L14').activate();
  spreadsheet.getRange('L14').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B12:P12'), true)
  .build());
  spreadsheet.getRange('L15').activate();
  spreadsheet.getRange('L15').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B13:P13'), true)
  .build());
  spreadsheet.getRange('L16').activate();
  spreadsheet.getRange('L16').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B14:P14'), true)
  .build());
  spreadsheet.getRange('L17').activate();
  spreadsheet.getRange('L17').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B15:P15'), true)
  .build());
  spreadsheet.getRange('L18').activate();
  spreadsheet.getRange('L18').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B16:P16'), true)
  .build());
  spreadsheet.getRange('L19').activate();
  spreadsheet.getRange('L19').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B17:P17'), true)
  .build());
  spreadsheet.getRange('L20').activate();
  spreadsheet.getRange('L20').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B18:P18'), true)
  .build());
  spreadsheet.getRange('L21').activate();
  spreadsheet.getRange('L21').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B19:P19'), true)
  .build());
  spreadsheet.getRange('L22').activate();
  spreadsheet.getRange('L22').setDataValidation(SpreadsheetApp.newDataValidation()
  .setAllowInvalid(true)
  .requireValueInRange(spreadsheet.getRange('\'Helper 2\'!B20:P20'), true)
  .build());
 spreadsheet.getRange('L1').activate();
};

【问题讨论】:

    标签: javascript validation google-apps-script google-sheets optimization


    【解决方案1】:

    看起来您使用宏记录器来生成代码,因为它包含许多类似spreadsheet.getRange('A1').activate() 的语句,在这种情况下,这些语句是完全没有必要的。要稍微缩短您的代码,请将它们全部删除。这不仅会缩短代码,还会减少执行时间。

    也不需要以下几行

    var currentCell = spreadsheet.getCurrentCell();
      spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
      currentCell.activateAsCurrentCell();
    

    为了进一步缩短你的代码,我建议你花一些时间学习 JavaScript 的基础知识,即变量、函数、数据结构、数组和循环。

    资源

    有关的

    【讨论】:

      【解决方案2】:

      尝试这个:

      function wa() {
        const ss = SpreadsheetApp.getActive();
        const sh = ss.getSheetByName("Helper 2");
        const rl0 = sh.getRangeList(['B1:P1', 'B2:P2', 'B3:P3', 'B4:P4', 'B5:P5', 'B6:P6', 'B7:P7', 'B8:P8', 'B9:P9', 'B10:P10', 'B11:P11', 'B12:P12', 'B13:P13', 'B14:P14', 'B15:P15', 'B16:P16', 'B17:P17', 'B18:P18', 'B19:P19', 'B20:P20']).getRanges();
        const rl1 = sh.getRangeList(['L3', 'L4', 'L5', 'L6', 'L7', 'L8', 'L9', 'L10', 'L11', 'L12', 'L13', 'L14', 'L15', 'L16', 'L17', 'L18', 'L19', 'L20', 'L21', 'L22']).getRanges();
        sh.getRange('L3').activate();
        var currentCell = sh.getCurrentCell();
        sh.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
        currentCell.activateAsCurrentCell();
        sh.getRange('L3:L134').clearDataValidations();
        rl1.forEach((rg, i) => {
          rg.activate();
          rg.setDataValidation(SpreadsheetApp.newDataValidation()
          .setAllowInvalid(true)
          .requireValueInRange(rl0[i],true)
          .build());
        });
        sh.getRange('L1').activate();
      };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-12
        • 2023-02-05
        • 2017-08-15
        • 1970-01-01
        • 2021-01-31
        相关资源
        最近更新 更多