问题描述
我是个菜鸟,所以“我的”代码可能不是它应该的样子。我使用这个 (https://blog.gsmart.in/google-apps-script-send-email-with-attachment/) 作为灵感并对其进行了一些修改。
让我先解释一下我想要实现的目标。我有很多不同人的联系信息,我希望他们能够检查这些信息是否仍然准确。我找到了一个解决方案,在该解决方案中,我首先将“所有人”提取到单独的 Google 表格中(遵循以下准则:https://www.youtube.com/watch?v=eVGENHcrOc4)。然后我给每个人发了一封电子邮件,只附上他们的信息,上面提到的代码,我稍微修改了一下。
它有效(我运行函数“sendFormToAll()”)。
但是。自动创建的表格的列太窄:信息不可读。所以我又摆弄了一些,并在某处添加了“autoResizeColumns”。我花了一些时间才把它弄好,但现在它起作用了。
但仍然...当运行“sendFormToAll()”时,autoResizeColumns 函数在 sendEmailWithAttachment 函数启动之前没有完成任务,所以发送出去的 pdf 文件仍然不好。如果我稍后再次运行代码,pdf 文件是好的,因为到那时,所有工作表都已调整大小。
所以我正在寻找一种运行“sendFormToAll()”的方法,其中系统首先让 autoResizeColumns 做他的事情,然后才从 sendEmailWithAttachment 开始。我尝试阅读 async/await,但我无法弄清楚...与 Promise 和 .then 的处理相同...我尝试实现它,但没有效果。
感谢您的帮助!
这是我现在得到的代码(包括无用的 async/await 实现):
function sendEmailWithAttachment(row)
{
var sheet = SpreadsheetApp.getActive().getActiveSheet();
var values = sheet.getRange(row,1,row,4).getValues();
var rec = values[0];
var filename = rec[0]
var file = DriveApp.getFilesByName(filename);
if (!file.hasNext())
{
console.error("Could not open file "+filename);
return;
}
var client = getClientInfo(row);
var template = HtmlService
.createTemplateFromFile('email-template');
template.client = client;
var message = template.evaluate().getContent();
MailApp.sendEmail({
to: client.email,subject: "The form to fill",htmlBody: message,attachments: [file.next().getAs(MimeType.PDF)]
});
}
function getClientInfo(row)
{
var sheet = SpreadsheetApp.getActive().getActiveSheet();
var values = sheet.getRange(row,5).getValues();
var rec = values[0];
var client =
{
first_name: rec[1],last_name: rec[2],email: rec[4]
};
client.name = client.first_name+' '+client.last_name;
return client;
}
function correctColumns(row)
{
var sheet = SpreadsheetApp.getActive().getActiveSheet();
var values = sheet.getRange(row,4).getValues();
var rec = values[0];
var filename = rec[0]
var file = DriveApp.getFilesByName(filename);
if (!file.hasNext())
{
console.error("Could not open file "+filename);
return;
}
while (file.hasNext()) {
var spreadsheet = SpreadsheetApp.open(file.next());
var sheet = spreadsheet.getSheets()[0];
sheet.autoResizeColumns(1,15);
}
}
async function sendFormToAll()
{
var sheet = SpreadsheetApp.getActive().getActiveSheet();
var last_row = sheet.getDatarange().getLastRow();
var last_column = sheet.getLastColumn()
for(var row=2; row <= last_row; row++)
{
await correctColumns(row);
sendEmailWithAttachment(row);
sheet.getRange(row,last_column).setValue("email sent");
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)