简体   繁体   中英

Inventory Reminders with Google Apps Scripts

Just started learning Javascript/Google Apps Script, so please be patient with me.

My goal is to create an automated email script that emails a reminder when the inventory stock has dipped below a certain level.

To start, I have a Google Sheet with 3 tabs: ContactSheet, ReorderSheet, and EmailSheet. These tabs have columns, respectively: person's name and email address; item name, number, manufacturer, current stock, and threshold for reorder; subject line and message.

Code below. No runtime errors, but the emails either do not send or they send out for only the first or last item in the spreadsheet. (Should be sending out exactly 5 emails for 5 different items.) I think the issue is with the if statement --- I'm assuming that the variables are not able to call on their respective indices, if that makes sense. I've tried converting the variables to arrays with no success. This version works best according to the logger, and only breaks down at the last block.

Thanks in advance.

function sendEmail() {
  var Spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var ContactSheet = Spreadsheet.getSheetByName('ContactSheet');
  var ReorderSheet = Spreadsheet.getSheetByName('ReorderSheet');
  var EmailSheet = Spreadsheet.getSheetByName('EmailSheet');
  
  var SubjectLine = EmailSheet.getRange(2,1).getValue();
  var Message = EmailSheet.getRange(2,2).getValue();
  
  var N = ReorderSheet.getLastRow();
  
  for(var i = 2; i < N+1; i++) {
    var ItemName = ReorderSheet.getRange(i,1).getValue();
    var ItemNumber = ReorderSheet.getRange(i,2).getValue(); 
    var ItemManufacturer = ReorderSheet.getRange(i,3).getValue();
    var ItemStock = ReorderSheet.getRange(i,4).getValue();
    var ItemReorder = ReorderSheet.getRange(i,5).getValue();}

  var M = ContactSheet.getLastRow();
  
  for(var j = 2; j < M+1; j++) {
    var Name = ContactSheet.getRange(j,1).getValue();
    var EmailAddress = ContactSheet.getRange(j,2).getValue();} 
  
  if (ItemStock < ItemReorder) {
    SubjectLine = SubjectLine.replace("<item>",ItemName);
    Message = Message.replace("<name>",Name).replace("<item>",ItemName).replace("<itemnumber>",ItemNumber).replace("<manufacturer>",ItemManufacturer);
    MailApp.sendEmail(EmailAddress, SubjectLine, Message);}
}

This for loop does not contain the sendEmail method:

for (var i = 2; i < N + 1; i++) {
    var ItemName = rsh.getRange(i, 1).getValue();
    var ItemNumber = rsh.getRange(i, 2).getValue();
    var ItemManufacturer = rsh.getRange(i, 3).getValue();
    var ItemStock = rsh.getRange(i, 4).getValue();
    var ItemReorder = rsh.getRange(i, 5).getValue();
  }

So your always only dealing with the data on the last row

Same with this one:

for (var j = 2; j < M + 1; j++) {
    var Name = csh.getRange(j, 1).getValue();
    var EmailAddress = csh.getRange(j, 2).getValue();
  }

This structure will send emails to every email address:

function sendEmail() {
  var ss = SpreadsheetApp.getActive();
  var csh = ss.getSheetByName('ContactSheet');
  var rsh = ss.getSheetByName('ReorderSheet');
  var esh = ss.getSheetByName('EmailSheet');
  var subject = esh.getRange(2, 1).getValue();
  var message = esh.getRange(2, 2).getValue();
  var N = rsh.getLastRow();
  var M = csh.getLastRow();
  for (var j = 2; j < M + 1; j++) {
    var Name = csh.getRange(j, 1).getValue();
    var EmailAddress = csh.getRange(j, 2).getValue();
    for (var i = 2; i < N + 1; i++) {
      var ItemName = rsh.getRange(i, 1).getValue();
      var ItemNumber = rsh.getRange(i, 2).getValue();
      var ItemManufacturer = rsh.getRange(i, 3).getValue();
      var ItemStock = rsh.getRange(i, 4).getValue();
      var ItemReorder = rsh.getRange(i, 5).getValue();
      if (ItemStock < ItemReorder) {
        subject = subject.replace("<item>", ItemName);
        message = message.replace("<name>", Name).replace("<item>", ItemName).replace("<itemnumber>", ItemNumber).replace("<manufacturer>", ItemManufacturer);
        MailApp.sendEmail(EmailAddress, subject, message);
      }
    }
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM