在 Google Apps 脚本中按文件 ID 发送文件
Send File by File ID in Google Apps Script
我正在使用 Google Sheets 将文件名列表存储在 Google 驱动器中,它们各自的文件 ID。我在同一个工作簿中使用另一个 sheet 来记录我要发送给这些电子邮件地址的电子邮件地址和文件名。
我有一个名为 Data 的 Sheet,包含以下列
- 文件名 - 存储在 Google 驱动器
上的文件
- 文件 ID - 从共享中派生的文件的文件 ID link
我有另一个名为 Request 的 Sheet,包含以下列
- 文件名
- 电子邮件地址
我想通过从数据 sheet 中为该文件名查找相应的文件 ID 来获取作为请求 sheet 中提到的文件名提到的文件。获取文件后,我想将该文件作为附件发送到请求 sheet 中提到的电子邮件地址。我想为请求 sheet.
中的每一行执行此操作
我创建了一个名为 DocTemplate
的 HTML 文件来构成电子邮件的正文。
我在 Google Sheet 的脚本编辑器中编写了以下代码。在 运行 上,触发了一封邮件,但它不包含附件,也不包含 HTML 文件的内容。邮件正文只是 [object Object]
我做错了什么?
function sendfile(){
var request = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Request");
var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
var Avals = request.getRange("A1:A").getValues();
var requestlastrow = Avals.filter(String).length;
var Avalsu = data.getRange("A1:A").getValues();
var datalastrow = Avalsu.filter(String).length;
for (var i=2;i<= requestlastrow;i++) {
var control = request.getRange(i,6).getValue();
if(control != 1){
var FilenameRequest = request.getRange(i,1).getValue();
for (var j=2;j<= datalastrow;j++) {
var FilenameData = upload.getRange(j,1).getValue();
if(FilenameRequest == FilenameData) {
/// to get the File ID
var FileID = data.getRange(j,2).getValue();
var file = DriveApp.getFileById(FileID);
/// to form the email
var values = request.getRange(i,1,1,2).getValues();
var rec = values[0];
var client =
{
email: rec[1],
name: rec[0]
};
client.subject = 'Request Filename:' + client.name;
var template = HtmlService
.createTemplateFromFile("DocTemplate.html");
template.client = client;
var message = template.evaluate().getContent();
MailApp.sendEmail(client.email,client.subject,{
htmlBody: message,
attachments: [file.getAs(MimeType.PDF)]
});
request.getRange(i,6).setValue("1");
}
}
}
}
}
由于这不是一个可重现的示例,我只能假设除此之外的其余代码都有效:
MailApp.sendEmail(client.email,client.subject,{
htmlBody: message,
attachments: [file.getAs(MimeType.PDF)]
});
它还应该包含消息参数:
MailApp.sendEmail(client.email,client.subject,message,{
htmlBody: message,
attachments: [file.getAs(MimeType.PDF)]
});
我正在使用 Google Sheets 将文件名列表存储在 Google 驱动器中,它们各自的文件 ID。我在同一个工作簿中使用另一个 sheet 来记录我要发送给这些电子邮件地址的电子邮件地址和文件名。
我有一个名为 Data 的 Sheet,包含以下列
- 文件名 - 存储在 Google 驱动器 上的文件
- 文件 ID - 从共享中派生的文件的文件 ID link
我有另一个名为 Request 的 Sheet,包含以下列
- 文件名
- 电子邮件地址
我想通过从数据 sheet 中为该文件名查找相应的文件 ID 来获取作为请求 sheet 中提到的文件名提到的文件。获取文件后,我想将该文件作为附件发送到请求 sheet 中提到的电子邮件地址。我想为请求 sheet.
中的每一行执行此操作我创建了一个名为 DocTemplate
的 HTML 文件来构成电子邮件的正文。
我在 Google Sheet 的脚本编辑器中编写了以下代码。在 运行 上,触发了一封邮件,但它不包含附件,也不包含 HTML 文件的内容。邮件正文只是 [object Object]
我做错了什么?
function sendfile(){
var request = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Request");
var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
var Avals = request.getRange("A1:A").getValues();
var requestlastrow = Avals.filter(String).length;
var Avalsu = data.getRange("A1:A").getValues();
var datalastrow = Avalsu.filter(String).length;
for (var i=2;i<= requestlastrow;i++) {
var control = request.getRange(i,6).getValue();
if(control != 1){
var FilenameRequest = request.getRange(i,1).getValue();
for (var j=2;j<= datalastrow;j++) {
var FilenameData = upload.getRange(j,1).getValue();
if(FilenameRequest == FilenameData) {
/// to get the File ID
var FileID = data.getRange(j,2).getValue();
var file = DriveApp.getFileById(FileID);
/// to form the email
var values = request.getRange(i,1,1,2).getValues();
var rec = values[0];
var client =
{
email: rec[1],
name: rec[0]
};
client.subject = 'Request Filename:' + client.name;
var template = HtmlService
.createTemplateFromFile("DocTemplate.html");
template.client = client;
var message = template.evaluate().getContent();
MailApp.sendEmail(client.email,client.subject,{
htmlBody: message,
attachments: [file.getAs(MimeType.PDF)]
});
request.getRange(i,6).setValue("1");
}
}
}
}
}
由于这不是一个可重现的示例,我只能假设除此之外的其余代码都有效:
MailApp.sendEmail(client.email,client.subject,{
htmlBody: message,
attachments: [file.getAs(MimeType.PDF)]
});
它还应该包含消息参数:
MailApp.sendEmail(client.email,client.subject,message,{
htmlBody: message,
attachments: [file.getAs(MimeType.PDF)]
});