首页 > 解决方案 > Google工作表脚本:如果列中的单元格大于“0”,则获取单元格值列表

问题描述

单击按钮后,我正在尝试从 Google 表格中的订购列表发送电子邮件。一切都很顺利,但我需要一个特定部分的帮助:列出所有订购的产品。

谷歌表格截图

我将以下代码添加到按钮中:

function sendMyEmails() {
    // Get sheet variables
    var sheet = SpreadsheetApp.getActiveSheet(); // Use data from the active sheet
    var Column_E = sheet.getRange("E1:E").getValues();

    var Companyname = sheet.getRange("K3").getValue(); // Company name in veld K3
    var Name = sheet.getRange("K4").getValue(); // Name in cell K4
    var Adress = sheet.getRange("K5").getValue(); // Adress in cell K5
    var Postalcode = sheet.getRange("K6").getValue(); // Postal code in cell K6
    var City = sheet.getRange("K7").getValue(); // City in cell K7
    var Products = ???;

    // Build the email message
    var emailBody =  'Hi,';
    emailBody += '<p>I would like to order:</p>';
    emailBody += '<i>'+ Products + '</i>';
    emailBody += '<p>You can deliver it to:</p>';
    emailBody += '<i>'+ Companyname + '</i><br><i>' + Name + '</i><br><i>' + Adress + '</i><br><i>'+ Postalcode + '</i><br><i>' + City + '</i><br></i>';
          emailBody += '<p>Thanks in advance!</p>';

     // Send the email
     MailApp.sendEmail(
     "email@email.nl", // recipient
      "New order", // subject
      '',                     
     // Body (plain text)
        {
        htmlBody: emailBody    // Options: Body (HTML)
        }
  );
}

如果值大于“0”(客户想要订购的产品数量),我想检查 E 列。如果 E 列中的单元格具有“1”或更高,则脚本应获取同一行的 K 列中单元格的值并将其放入电子邮件消息中(作为列表)。订购 2 件产品后,邮件应如下所示:

Hi,

I would like to order:

1x article A (value of a cell in column K)
1x article B (value of a cell in column K)

You can deliver it to:

Company
Name
Address
Postal code
City

Thanks in advance!

标签: google-apps-scriptgoogle-sheets

解决方案


您必须遍历包含产品的所有行,并检查每一行的相应数量是否高于 0。如果是这种情况,则产品信息将附加到电子邮件正文中。它可能是以下几行(检查内联注释以获取有关代码在每一行所做的更多详细信息):

function sendMyEmails() {
  var sheet = SpreadsheetApp.getActiveSheet(); // Use data from the active sheet  
  // Build the email message:
  var emailBody =  'Hi,';
  emailBody += '<p>I would like to order:</p>';  
  // Build product part:
  var firstRow = 10; // Where product data starts (in your sample, it's row 10)
  var firstCol = 1; // Which column product data starts
  var numRows = sheet.getLastRow() - firstRow + 1;
  var numCols = sheet.getLastColumn() - firstCol + 1;
  // Get all values about product data:
  var productData = sheet.getRange(firstRow, firstCol, numRows, numCols).getValues();
  var products = "";
  for (var j = 0; j < productData.length; j++) { // Iterating through all row with product data
    var row = productData[j];
    var quantity = row[4];
    if (quantity > 0) { // Check if quantity is above 0
      var article = row[0];
      // Append product data:
      products += '<i>' + quantity + 'x article number ' + article + '</i><br>';
    }
  }
  emailBody += '<i>'+ products + '</i>'; // Append all product data to the email body
  // Build contact data part:
  var contactData = sheet.getRange("K3:K7").getValues();
  emailBody += '<p>You can deliver it to:</p>';
  for (var i = 0; i < contactData.length; i++) { // Iterating through all contact data
    emailBody += '<i>' + contactData[i][0] + '</i><br>' // Adding contact data to email body
  }
  emailBody += '<p>Thanks in advance!</p>';  
  // Send the email
  MailApp.sendEmail(
    "email@email.nl", // recipient
    "New order", // subject
    '',                     
    // Body (plain text)
    {
      htmlBody: emailBody    // Options: Body (HTML)
    }
  );
}

我测试了代码,它发送了一封类似这样的电子邮件:

在此处输入图像描述

笔记:

  • 在此示例中,我没有使用 K 列中的数据,而是1x article A在脚本本身中创建消息(请参阅内联注释)。
  • 在此示例中,我使用循环添加联系人数据,而不是getValue为每个单元格创建一个并将所有字段一一添加到电子邮件正文中(请参阅内联注释)。

参考:

我希望这有任何帮助。


推荐阅读