google-apps-script - 创建未隐藏工作表 Google Script 的 PDF
问题描述
我为谷歌表格创建了一个简单的电子邮件脚本。我需要它来附加活动文件的 PDF,但只有 3 张(3 张未隐藏的表格)。我已经尝试了几件事,但似乎没有任何效果,老实说,我不是谷歌脚本的专家,所以我可能遗漏了一些明显的东西。以下是我的代码:
function sendEmails() {
var sheet = SpreadsheetApp.getActive().getSheetByName('Email');
var startRow = 2; // First row of data to process
var numRows = 1; // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 3);
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i in data) {
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var subject = row[2];
var file= SpreadsheetApp.getActive();
MailApp.sendEmail(emailAddress, subject, message,{cc:"example@gmail.com",attachments:[file.getAs(MimeType.PDF)]});
}
}
它所做的是将整个电子表格附加为 PDF,这对我没有帮助,因为 PDF 中有很多我不需要的隐藏工作表。请帮我!!谢谢!
解决方案
该功能将向电子邮件表中的收件人发送电子邮件,其中还包含主题和消息。它还使用 incl 数组中的工作表创建当前电子表格的 PDF。发送电子邮件后,它会将工作表返回到其原始可见性状态。
function emailAsPDF() {
var ss=SpreadsheetApp.getActive();
var incl=['Sheet2','Emails'];
var pdfFolderId="Folder Id";
var folder=DriveApp.getFolderById(pdfFolderId);
var sObj={shA:[]};
var shts=ss.getSheets();
shts.forEach(function(sh,i){
sObj.shA.push(sh.getName());
if(sh.isSheetHidden()) {
sObj[sh.getName()]='hide';
}else{
sObj[sh.getName()]='show';
}
if(incl.indexOf(sh.getName())!=-1) {
sh.showSheet();
}else{
sh.hideSheet();
}
});
var file=folder.createFile(ss.getBlob()).setName(ss.getName()).getAs(MimeType.PDF);
var sh=ss.getSheetByName('Emails');
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
var hObj={};
hA.forEach(function(e,i){if(e){hObj[e]=i;}})
var vA=rg.getValues();
vA.forEach(function(r,i){
var recipient=r[hObj.recipient];
var subject=r[hObj.subject];
var message=r[hObj.message];
GmailApp.sendEmail(recipient, subject, message, {attachments:[file]})
})
sObj.shA.forEach(function(name,i){
if(sObj[name]=='hide') {
ss.getSheetByName(name).hideSheet();
}else{
ss.getSheetByName(name).showSheet();
}
});
}
这是我的电子邮件表的图像:
我知道...这很简单,但是您可以根据需要对其进行改进。
推荐阅读
- mysql - nodejs mysql如何在循环将数据输入数据库后关闭连接
- google-apps-script - Google Apps 脚本:Salesforce OAuth2 集成
- vim - 使 YcmCompleter GoTo 自动展开
- c# - vsix 实验实例中的事件仅工作一次
- xamarin.android - SMDiagnostics 未解决
- python - 在python中生成每个可能的字符串组合
- javascript - 如何将动态创建的元素注入 React JSX 中的现有 div?
- java - 使用休眠显示数据库中的数据
- c# - 需要帮助在另一台计算机上的 IIS 服务器上部署使用 EF6 的 ASP.NET WebApp
- android - 即使使用 InputStream,如何获得可靠且有效的 APK 文件清单内容?