【问题标题】:Loop through Googlesheet and grab all rows matching a specific critiera in a user column循环遍历 Google Sheet 并获取与用户列中特定条件匹配的所有行
【发布时间】:2021-11-07 23:08:29
【问题描述】:

我正在尝试编写一个 javascript (Googlescript) 来循环遍历分配给不同用户的特定任务的 Google 表格,并获取分配给“UserA”的所有行并发送一封电子邮件,其中包含分配给 userA 的所有任务的列表.然后对 UserB 做同样的事情

  • 任务不按用户排序。

  • 工作表中的列依次为:名称、描述、状态、所有者、截止日期

  • 我能够发送电子邮件,但存在信息问题,问题是如果您分配了 X 数量的任务,您会收到 X 数量的电子邮件。如果您有 10 多个任务,这将是一个问题......

      function sendEmails() {
    
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ITPM_Tasks");
    var lastRow = sheet.getLastRow();
    var startRow = 2; // First row of data to process
    var numRows = lastRow - 1; // Number of rows to process
    // Fetch the range of cells A:P
    
    var dataRange = sheet.getRange(startRow, 1, numRows, 5);
    // Fetch values for each row in the Range.
    
    var data = dataRange.getValues();
    
    for (var i = 0; i < data.length; ++i) {
    
      var row = data[i]; 
      var owner = row[3]; 
      var status = row[2];
      var desc = row[1];
      var due = row[4];
      var due_date = due.toDateString();
    
      var message = 'Reminder: A task is assigned to you\n\n' + desc + '\nwith a due date of ' 
      + due_date + ' \n\nPlease complete and change status to completed or notify the ITPM Team \n\nThank You'
    
      if (status != 'Complete') { // Prevents sending if status is not completed
        var subject = 'Weekly Reminder: A task is assigned to you ';
        MailApp.sendEmail(owner, subject, message);
        SpreadsheetApp.flush();
      }
    }
    

    }

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。不幸的是,我无法从an email with the list of all the tasks assigned to userA 想象你的目标。我可以问你目标的细节吗?例如,您能否提供您期望作为图像的示例输入和输出?通过这个,我想试着理解你的问题。

标签: javascript arrays google-apps-script google-sheets


【解决方案1】:

在一封电子邮件中发送每个人的所有任务

此版本在每封电子邮件的对话框中显示一个基本的文本块,以便我可以在不发送电子邮件的情况下对其进行测试

function sendEmails() {
  let s = '';
  const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
  const lastRow = sh.getLastRow();
  const startRow = 2; // First row of data to process
  const numRows = lastRow - 1; // Number of rows to process
  const rg = sh.getRange(startRow, 1, numRows, 5);
  const vs = rg.getValues();
  let oners = {pA:[]};
  vs.forEach((r,i) => {
    let [name,desc,status,owner,due] = r;
    if(status != 'Complete') {
     if(!oners.hasOwnProperty(owner)) {
       oners[owner]=[];
       oners[owner].push(r);
       oners.pA.push(owner)
     } else {
       oners[owner].push(r);
     }
    }
  });
  let subject = 'Weekly Reminder: The following tasks are assigned to you.';
  oners.pA.forEach(p => {
     let msg = `Tasks:\n`
     msg += `Owner:${oners[p][0][3]}\n`;
     msg += `Subject: ${subject}\n`
    oners[p].forEach((r,i) => {
      let [name,desc,status,owner,due] = r;
        msg += `Task- ${i+1}\n`;
        msg += `Desc:${desc}\n`;
        msg += `Due Date: ${due.toDateString()}\n`
    });
    msg += `Please complete and change status to completed or notify the ITPM Team \nThank You\n`;
    //MailApp.sendEmail(owner, subject, msg);
    msg += `\n\n***********************************\n\n`;
    s+=msg;
  });
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(`<textarea cols="50" rows="12">${s}</textarea>`),'Simple Dialog')
}

这个版本应该发送电子邮件。您可能希望稍微修改一下消息。

function sendEmails() {
  let s = '';
  const sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
  const lastRow = sh.getLastRow();
  const startRow = 2; // First row of data to process
  const numRows = lastRow - 1; // Number of rows to process
  const rg = sh.getRange(startRow, 1, numRows, 5);
  const vs = rg.getValues();
  let oners = {pA:[]};
  vs.forEach((r,i) => {
    let [name,desc,status,owner,due] = r;
    if(status != 'Complete') {
     if(!oners.hasOwnProperty(owner)) {
       oners[owner]=[];
       oners[owner].push(r);
       oners.pA.push(owner)
     } else {
       oners[owner].push(r);
     }
    }
  });
  let subject = 'Weekly Reminder: The following tasks are assigned to you.';
  oners.pA.forEach(p => {
     let msg = `Tasks:\n`
     msg += `Owner:${oners[p][0][3]}\n`;
     msg += `Subject: ${subject}\n`
    oners[p].forEach((r,i) => {
      let [name,desc,status,owner,due] = r;
        msg += `Task- ${i+1}\n`;
        msg += `Desc:${desc}\n`;
        msg += `Due Date: ${due.toDateString()}\n`
    });
    msg += `Please complete and change status to completed or notify the ITPM Team \nThank You\n`;
    MailApp.sendEmail(oners[p][0][3], subject, msg);
  });
}

【讨论】:

    猜你喜欢
    • 2017-03-24
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多