[英]G-script : List and Filter G-Drive Files from Variables Stored in a G-Sheet
[英]Send Email with data from g-sheet table
我是 Google App Scripts 的新手,并且有一个包含五列的电子表格:ISIN、Company、SecAccNo、Size 和 Type。 我已将表的范围命名为 A1:E20 Shares。
这些列是由公式自动填充的,所以有时我用 5 行数据填充这个表,有时用 20 行数据填充。 现在,即使我只有 5 行数据,我的脚本也会发送一个包含 20 行的 email。 所以15行空白行。
我想添加一个 function “校验值”,检查最后一列“类型”中是否在填充行时始终为“条目”,以便发送 email 时仅包含最后一个“条目”的行“类型”列,你能帮我吗?
这是我的脚本:
function getEmailHtml(stockData) {
var htmlTemplate = HtmlService.createTemplateFromFile("Template.html");
htmlTemplate.stocks = stockData;
var htmlBody = htmlTemplate.evaluate().getContent();
return htmlBody;
}
function sendEmail() {
var stockData = getData();
var body = getEmailText(stockData);
var htmlBody = getEmailHtml(stockData);
if (stock.type === "Entry")
MailApp.sendEmail({
to: "xyz@gmail.com", //Enter your email address
subject: "Manual Posad",
body: body,
htmlBody: htmlBody
});
}
function getEmailText(stockData) {
var text = "";
stockData.forEach(function(stock) {
text = text + stock.isin + "\n" + stock.company + "\n" + stock.secaccno + "\n" + stock.size + "\n" + stock.type + "\n-----------------------\n\n";
});
return text;
}
/**
* @OnlyCurrentDoc
*/
function getData() {
var values = SpreadsheetApp.getActive().getSheetByName("Data").getRange("Stocks").getValues();
values.shift(); //remove headers
var stocks = [];
values.forEach(function(value) {
var stock = {};
//Logger.log("stocks:"+stocks);
stock.isin = value[0];
stock.company = value[1];
stock.secaccno = value[2];
stock.size = value[3];
stock.type = value[4];
stocks.push(stock);
})
//Logger.log(JSON.stringify(stocks));
return stocks;
}
您可以通过另一种使用.getRange()方法获得动态结尾。 用途是: .getRange(startrow, startcol, numRows, numCols
)。 变化下方:
var values = SpreadsheetApp.getActive().getSheetByName("Data").getRange("Stocks").getValues();
至:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Data");
var values = sheet.getRange(1, 1, sheet.getLastRow(), 5).getValues();
GS:
function getMyData() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet1");
const vs = sh.getRange("A1:E20").getValues().filter(r => r[4] !== '');
Logger.log(JSON.stringify(vs));
return vs;
}
function sendEmailTable() {
let htmlTemplate = HtmlService.createTemplateFromFile('ah1');
let html = htmlTemplate.evaluate().getContent();
let recipients = "recip@gmail.com";
let subject = "My Data"
GmailApp.createDraft(recipients, subject, '', { htmlBody: html });
}
html:(文件名:ah1.html)
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div id="tabledata">
<? var vs = getMyData(); ?>
<table>
<? vs.forEach((r,i)=>{ ?>
<tr>
<? r.forEach((c,j)=>{ ?>
<? if(i == 0) { ?>
<th style="padding:2px 5px;font-weight:bold;border:1px solid black;"><?= c ?> </th>
<? } else { ?>
<td style="padding:2px 5px;border:1px solid black;"><?= vs[i][j] ?> </td>
<? } ?>
<? }); ?>
</tr>
<? }); ?>
</table>
</div>
</body>
</html>
Email 草案:
Sheet1:范围:A1:E20
伊辛 | 公司 | SecAccNo | 尺寸 | 类型 |
---|---|---|---|---|
1 | 2 | 3 | 4 | 5 |
2 | 3 | 4 | 5 | 6 |
3 | 4 | 5 | 6 | 7 |
4 | 5 | 6 | 7 | 8 |
5 | 6 | 7 | 8 | 9 |
6 | 7 | 8 | 9 | 10 |
7 | 8 | 9 | 10 | 11 |
8 | 9 | 10 | 11 | 12 |
9 | 10 | 11 | 12 | 13 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.