google-apps-script - 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!
解决方案
您必须遍历包含产品的所有行,并检查每一行的相应数量是否高于 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
为每个单元格创建一个并将所有字段一一添加到电子邮件正文中(请参阅内联注释)。
参考:
我希望这有任何帮助。
推荐阅读
- javascript - 我可以使用 window.onerror 捕获 React 错误吗?
- serilog - Serilog 仅在一个文件中滚动日志
- reactjs - React-Redux 单击时更改状态
- c++ - 如何从 std::chrono::system_clock::time_point.time_since_epoch().count() 获取 std::chrono::system_clock::time_point?
- java - 联系不在 testRunner 类和条件下的类的最佳方式
- netsuite - 为什么我不能在 SuiteScript 中创建供应商账单?
- git - Git fetch 不会更新到最新提交
- react-router-v4 - 从 auth0 重定向到 netlify 时出错
- c - 创建一个复制 3d 数组内容的函数
- python - Python 值与标头不匹配