google-apps-script - Google表格,如何向每位客户发送带有附件的电子邮件
问题描述
我有一张带有一些选项卡的工作表,在一个选项卡中我为我的客户做声明,我在 B2 中选择一个客户并使用查询公式我得到所需的数据,之后我有一个脚本来首先隐藏空白行然后以 pdf 作为附件发送该电子邮件,我仅在需要发送该电子邮件时才进行精简。
这是我的脚本:
function HideEdoCta() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheetByName('Edo Cta');
var lastRow = sheet.getLastRow();
var range = sheet.getRange(1, 4, lastRow, 1);
var data = range.getValues();
//Rows
for (var i = 0; i < data.length; i++) {
if (data[i][0] == 1) {
sheet.hideRows(i + 1)
}
}
sheet.hideColumns(4, 1)
}
function UnHideEdoCta() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Edo Cta');
sheet.unhideRow(sheet.getDataRange());
}
function MailEdoCta(email, subject, body, sheetName) {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheetByName('Edo Cta');
var valueToCheck = sheet.getRange('C1').getValue();
if (valueToCheck == true && casa != '') {
HideEdoCta()
SpreadsheetApp.flush()
var email = sheet.getRange('D1').getValue(); // Enter the required email address here
var casa = sheet.getRange('B2').getValue();
var subject = 'Estado de Cuenta Sky';
var body =
"Hola, <strong>" + casa + "</strong><br><br>" +
"xxx.<br>" +
"-- <br>" +
"<strong>xxx</strong><br>"
;
// Base URL
var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ss.getId());
var url_ext = 'exportFormat=pdf&format=pdf' // export as pdf / csv / xls / xlsx
+ '&size=letter' // paper size legal / letter / A4
+ '&portrait=true' // orientation, false for landscape
+ '&scale=1' // 1= Normal 100% / 2= Fit to width / 3= Fit to height / 4= Fit to Page
+ '&fitw=true&source=labnol' // fit to page width, false for actual size
+ '&sheetnames=false&printtitle=false' // hide optional headers and footers
+ '&pagenumbers=true&gridlines=false' // hide page numbers and gridlines
+ '&fzr=false' // do not repeat row headers (frozen rows) on each page
+ '&gid='; // the sheet's Id
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url + url_ext + sheet.getSheetId(), {
headers: {
'Authorization': 'Bearer ' + token
}
}).getBlob().setName(sheet.getName() + ".pdf");
// Uncomment the line below to save the PDF to the root of your drive.
// var newFile = DriveApp.createFile(response).setName(sheet.getName() + ".pdf")
GmailApp.sendEmail(email, subject, "",
{ name: 'xxx', htmlBody: body, attachments: [response] }
);
SpreadsheetApp.flush()
UnHideEdoCta()
sheet.getRange('C1').setValue(false)
sheet.getRange('B2').clearContent()
}
else {
sheet.getRange('C1').setValue(false)
}
}
在这个脚本中,我有一个验证,如果在 B2 中选择了一个客户并且 C1 为真,请发送电子邮件,因为触发器设置为每分钟运行一次。
现在我需要的是每月 5 日自动向我的所有客户发送相同的电子邮件(我只有 24 个客户)
如果不一一选择,我怎么能做到这一点?
请问有什么帮助吗?
解决方案
尝试这个
function mailing() {
var doc = SpreadsheetApp.getActive();
var sh = SpreadsheetApp.getActiveSheet();
var data = doc.getRange('listOfCustomers').getValues();
for (var i = 0; i < data.length; i++) {
if (data[i][1]) {
sh.getRange('B2').setValue(data[i][0]);
SpreadsheetApp.flush();
Utilities.sleep(1000);
}
}
};
您的电子表格副本将不胜感激进行测试。
推荐阅读
- python - 如何在一个图中同时绘制 3 个图?
- android - 使用 React-Native App 连接蓝牙设备
- sql - 如何计算有多少客户在 SQL 中发生了特定事件
- python - 函数 ord() 的功能
- java - 基于java8中用户选择的属性动态排序列表
- r - 为什么我会收到此错误:`data` 和 `reference` 应该是具有相同级别的因素
- apache-kafka - Logstash 可以同时接受 Kafka 和 REST(HTTP)
- xamarin - 如何在 iOS 模拟器上显示远程图像
- python - 在python中将excel文件转换为numpy数组矩阵
- python - 我收到这个简单代码的语法错误