簡體   English   中英

提取列符合條件的行,然后通過電子郵件發送(Google表格)

[英]Fetch rows with column matching a criteria and send them by email (Google Sheets)

這里需要在列中設置最小數量,並且一旦庫存中具有等於或小於該數量的商品數量,則每天發送一封電子郵件並提取行。 我將下面的腳本用於其他目的,但這一次發送一封電子郵件,每行只有一行,而現在我們需要提取一行並以一封電子郵件發送(HTML格式是理想的)。

var EMAIL_SENT = "EMAIL_SENT";

function sendEmails2() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Pedidos");
  var startRow = 7;  // First row of data to process
  var numRows = sheet.getLastRow();   // Number of rows to process
  // Fetch the range of cells A7:s3
  var dataRange = sheet.getRange(startRow, 1, numRows, 25)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) {
    var rowData = data[i];
    if (rowData[13] === "Ativo") {
    var emailAddress = "";  // First column
    var update = rowData[12];
    var NumPedido = rowData[0];
    var Cliente = rowData[1];
    var UF = rowData[3];
    var Produto = rowData[4];
    var TotaldoPedido = rowData[7];
    var NumNF = rowData[8];
    var Status = rowData[13];
    var Obs = rowData[16];
    var DataAgenda = rowData[11];
    var senha = rowData[15];
    var respons = rowData[17];
    var message =  "<HTML><BODY>"
    //+ "<P>Dear " + firstname + ","
    //+ "<br /><br />"
    + "<P>Status do Pedido " + NumPedido + ", do cliente " + Cliente + " foi atualizado! Veja abaixo:"
    + "<brr /><br />"
    + "<br>Data da Atualização:  </b>" + update + "<br />" 
    + "<br>Nº do Pedido:  </b>" + NumPedido + "<br />" 
    + "<br>Cliente:  </b>" + Cliente + UF + "<br />" 
    + "<br>Produto:  </b>" + Produto + "<br />" 
    + "<br>Nº da NF:  </b>" + NumNF + "<br />"  
    + "<br>Status: </b>" + Status + "<br />"  
    + "<br>Senha:  </b>" + senha + "<br />"  
    + "<br>Observações: </b>" + Obs + "<br />" 
    + "<br>Responsável: </b>" + respons + "<br />" 
    + "<br /><br />"    
    + "<br>Clique para explorar detalhes, ou para atualizar o status: </b>" + "" + "<br />" 
    + "<br /><br />"  
    + "</HTML></BODY>";      
    var emailAtivo = rowData[18];    
    if (emailAtivo != EMAIL_SENT && rowData[13] === "Ativo") {  // Prevents sending duplicates
      var subject = "Status do Pedido " + NumPedido + " do " + Cliente + " " + UF + " atualizado";
  MailApp.sendEmail({
    to: emailAddress, 
    subject: subject, 
    htmlBody: message
  });

  sheet.getRange(startRow + i, 19).setValue(EMAIL_SENT);

  // Make sure the cell is updated right away in case the script is interrupted
  SpreadsheetApp.flush();
//}

}}


這是更新后的腳本:function sendTableEmail(){var sheet = SpreadsheetApp.getActiveSpreadsheet()。getSheetByName(“ Estoque-Almox-ADB”);

  // Get your table data
  var startRow = 7;  // First row of data to process
  var numRows = sheet.getLastRow(); // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 14); // Fetch the range of cells A7:D
  var data = dataRange.getValues(); // Fetch values for each row in the Range.
  var minimum = sheet.getRange("n7:n32").getValue(); // Minimum quantity to check against

  // Loop through the data to build your table
  var message = "<html><body><table style=\"text-align:center\"><tr><th>Código</th><th>Descrição</th><th>Qtd(Cx)</th><th>Estoque Mín. (Cx)</th></tr>";
  for (var i = 0; i < data.length; ++i) {
    var rowData = data[i];
    var Code = rowData[4];
    var Description = rowData[5];
    var InventoryUnit = rowData[10];
    var InventoryBox = rowData[11];
    var InventoryPallet = rowData[12];
    //var MinQty = rowData[13];
    //if (minimum >= 31) {
      if (InventoryBox <= minimum) {
        //var valueA = rowData[0];
        //var valueB = rowData[1];
        message += "<tr><td>"+Code+"</td><td>"+Description+"</td><td>"+InventoryBox+"</td><td>"+minimum+"</td></tr>";
      //} 
    }
  }
  message += "</table></body></html>";
  var subject = "Alerta de Estoque Mín. na Expedição";
  MailApp.sendEmail({
    to: "EMAIL", 
    subject: subject, 
    htmlBody: message
  });
}

...這是我的電子郵件中收到的結果: 在此處輸入圖片說明 它會帶入不應包含的十進制數字(第四列),第五列顯示30,而在電子表格中,公式的結果為“”,其中未列出任何產品。 再次感謝您的幫助。


抱歉,這是這樣: 在此處輸入圖片說明

因此,如果列L <=列N,則獲取滿足此條件的行並將其發送給電子郵件。

我更清楚地了解您現在在做什么。 由於“最小”對於每一行都是唯一的,因此可以在啟動dataRange時將其dataRange 為防止列表中包含空白值,請在繼續操作前檢查Code是否為空白。 要固定小數,請使用toFixed()請參閱docs )。 最后,以防萬一不需要發送電子郵件,我添加了sendEmail布爾值。 如果您的數量都還可以,則不會發送電子郵件。

function sendTableEmail() { 
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Estoque-Almox - ADB");

  // Get your table data
  var startRow = 7;  // First row of data to process
  var numRows = sheet.getLastRow(); // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 15); // Fetch the range, including the minimums
  var data = dataRange.getValues(); // Fetch values for each row in the Range.

  // Loop through the data to build your table
  var message = "<html><body><table style=\"text-align:center\"><tr><th>Código</th><th>Descrição</th><th>Qtd(Cx)</th><th>Estoque Mín. (Cx)</th></tr>";
  var sendEmail = false; // If there is content to send, will be set to true
  for (var i = 0; i < data.length; ++i) {
    var rowData = data[i];
    var Code = rowData[4];
    if (Code != "") { // Check for blank Code. If blank, then skip and don't add to the table.
      var Description = rowData[5];
      var InventoryUnit = rowData[10];
      var InventoryBox = rowData[11];
      var InventoryPallet = rowData[12];
      var minimum = rowData[13];
      if (InventoryBox <= minimum) {
        message += "<tr><td>"+Code+"</td><td>"+Description+"</td><td>"+Number(InventoryBox).toFixed(0)+"</td><td>"+minimum+"</td></tr>";
        sendEmail = true; // There is content to send!
      }
    }
  }
  message += "</table></body></html>";
  if (sendEmail) {
    var subject = "Alerta de Estoque Mín. na Expedição";
    MailApp.sendEmail({
      to: "EMAIL", 
      subject: subject, 
      htmlBody: message
    });
  }
}

您沒有為我提供足夠的信息來解決您的嘗試,因此,我為您提供了一個基於您所提供內容的示例。 一般原則是:

我希望這有幫助。

function sendTableEmail() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Pedidos");

  // Get your table data
  var startRow = 7;  // First row of data to process
  var numRows = sheet.getLastRow(); // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, numRows, 4); // Fetch the range of cells A7:D
  var data = dataRange.getValues(); // Fetch values for each row in the Range.
  var minimum = sheet.getRange("B4").getValue(); // Minimum quantity to check against

  // Loop through the data to build your table
  var message = "<html><body><table style=\"text-align:center\"><tr><th>A</th><th>B</th><th>Quantity</th><th>Status</th></tr>";
  for (var i = 0; i < data.length; ++i) {
    var rowData = data[i];
    var status = rowData[3];
    var quantity = rowData[2];
    if (status == "Ativo") {
      if (quantity <= minimum) {
        var valueA = rowData[0];
        var valueB = rowData[1];
        message += "<tr><td>"+valueA+"</td><td>"+valueB+"</td><td>"+quantity+"</td><td>"+status+"</td></tr>";
      } 
    }
  }
  message += "</table></body></html>";
  var subject = "Email Subject";
  MailApp.sendEmail({
    to: "YOUR_EMAIL_ADDRESS@DOMAIN.COM", 
    subject: subject, 
    htmlBody: message
  });
}

這就是電子表格的外觀。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM