如何在不同的选项卡上运行相同的代码?

时间:2016-02-04 15:57:06

标签: google-apps-script google-sheets

我有一些代码在桌面上运行,并在项目到期时发送电子邮件。

function expiryAlert() {
  // get the spreadsheet object
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  // set the first sheet as active
  SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
  // fetch this sheet
  var sheet = spreadsheet.getActiveSheet();

  // figure out what the last row is
  var lastRow = sheet.getLastRow();

  // the rows are indexed starting at 1, and the first row
  // is the headers, so start with row 4
  var startRow = 3;

  // days left column
  var range = sheet.getRange(7,4,lastRow-startRow+1,1 );
  var numRows = range.getNumRows();
  var days_open_values = range.getValues();

  // item number column
  range = sheet.getRange(7, 1, lastRow-startRow+1, 1);
  var item_number_values = range.getValues();

  //Now grab the description number
  range = sheet.getRange(7, 2, lastRow-startRow+1, 1);
  var description_values = range.getValues();

  //Now grab the email addresses
  range = sheet.getRange(7, 7, lastRow-startRow+1, 1);
  var emailAddress_values = range.getValues();

  //Now grab the alert days value
  range = sheet.getRange(2, 2);
  var alert_days_values = range.getValues();

  //Grab the sheet title
  range = sheet.getRange(1,1);
  var title_values = range.getValues();

  //Grab the extra alert message
  range = sheet.getRange(3,2);
  var alert_message_values = range.getValues();

  var msg = "";

  // Loop over the days left values
  for (var i = 0; i <= numRows - 1; i++) {
    var days_open = days_open_values[i][0];
    var alert_days = alert_days_values;
    if(days_open == alert_days) {

      var item_number = item_number_values[i][0];
      var description = description_values[i][0];
      var emailAddress = emailAddress_values[i][0];
      var title = title_values;
      var alert_message = alert_message_values;

      msg = msg + "This is an automated alert for "+title+"\n\nItem number "+item_number+", "+description+", is due to expire in "+days_open+" days. Please ensure it is updated or reviewed.\n\n"+alert_message+"\n\n";

    MailApp.sendEmail(emailAddress,title, msg);
    }
  }

};

我想为另一个班次添加另一个标签,并在该表格上运行相同的代码。

我该怎么做?我用Google搜索并搜索,无法找到任何帮助。

非常感谢!

2 个答案:

答案 0 :(得分:0)

您需要删除此代码:

// set the first sheet as active
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);

如果您希望代码在当前活动的工作表上运行。这行代码总是获得电子表格中的第一个工作表标签。索引零[0]是数组中的第一个工作表。

如果您希望代码影响当前活动的工作表标签,则需要手动选择希望代码处理的工作表标签,或者您需要具有两个不同菜单项的内容每个都将工作表名称传递给代码。

您可以按名称获取每张纸:

.getSheetByName(theSheetName)

如果您这样做,则需要将工作表名称传递给该函数。

function expiryAlert(theSheetName) {

您可以在每张工作表中看到一个看起来像按钮的图像,并且附加的脚本将具有工作表名称。你可以有一个带有两个不同按钮的侧边栏。您可以使用带有工作表名称下拉列表的侧栏。

答案 1 :(得分:0)

我做了类似的事情。我不是专家,只是一个苦苦挣扎的业余程序员。您的脚本可能会生成一个code.gs选项卡,对。点击该标签并下拉菜单,然后选择制作副本。它将在底部创建一个名为Copyof Code.gs的新选项卡。进入Copyof Code的脚本。gs对代码进行必要的更改。点击保存按钮。返回左侧垂直标签列表中的标签(如果您选择顶部标签,则下一位无效)。选择下拉菜单,重命名,然后重命名为有意义的东西。如果您乐于保留Code.gs,则需要返回到先前从选择下拉菜单中删除的原始code.gs,然后删除。在弹出窗口中确认您确定。需要执行此步骤,因为它不喜欢具有相同名称的标签。转到垂直标签页名称列表CopyofCode.gs。选择下拉菜单重命名,然后仔细选择并删除Copyof,仅保留Code.gs 点击保存按钮,然后点击运行按钮。瞧,新代码将运行。基于垂直标签列表的最低标签中编写的代码。

我已经创建了18个相似的选项卡,所有这些选项卡对数据的处理都略有不同,并且在保存和运行之前,似乎没有办法通过弯曲的复制,重命名和删除过程将特定的选项卡移动到选项卡列表的底部。抱歉,请提供详细信息。 Des表示,如果有人知道更简单的方法,我会很高兴