组合多个脚本

时间:2018-07-12 05:18:37

标签: google-apps-script

我有一些项目,这些项目有单独的脚本,用于单个电子表格的不同标签。它们用于对表单提交中的数据进行排序。

var sheetToSort = "Expenses";
var columnToSortBy = 1;
var rangeToSort = "A2:I";

function sortExpenses() {
  var sheet = 
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetToSort);
  var range = sheet.getRange(rangeToSort);
  range.sort( { column : columnToSortBy, ascending: false } );
}

然后我有另一个;

var sheetToSort = "Investments";  
var columnToSortBy = 1;
var rangeToSort = "A2:E";

function sortInvestments() {
  var sheet = 
SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetToSort);
  var range = sheet.getRange(rangeToSort);
 range.sort( { column : columnToSortBy, ascending: false } );
}

如果我尝试将此脚本与第一个脚本添加到同一项目中,则它将仅在一个选项卡上起作用,而不能同时在两个选项卡上起作用。

在没有多个项目的情况下执行此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

如评论中所述,您可以重命名变量,它将正常工作。

但是

拥有模块化代码的整个逻辑是增强可重用性。这意味着将在多个地方使用的通用代码重构为一个单独的模块/功能,然后在需要的地方重复使用相同的代码。

对于费用和投资,您的排序功能在逻辑上都是相同的;仅工作表名称,列,范围更改有所不同。因此,您可以将代码作为另一个函数的参数,然后在此处执行排序,从而重构代码以对工作表进行排序。这样,您将能够通过排序功能重用代码,只有属性会根据传递的参数而改变。

您可以执行以下操作:

function sortExpenses() {
  // One way to call
  var sheetToSort = "Expenses";
  var columnToSortBy = 1;
  var rangeToSort = "A2:I";
  sortSheet(sheetToSort, rangeToSort, columnToSortBy)
}

function sortInvestments() {
  // If you're not re-using those variable you can directly pass the values like this
  sortSheet("Investments", "A2:E",1);
}


function sortSheet(sheetToSort, rangeToSort, columnToSortBy) {
  var sheet =
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetToSort);
  var range = sheet.getRange(rangeToSort);
  range.sort({
    column: columnToSortBy,
    ascending: false
  });
}