Google应用程序脚本提取数据并在表中注册电子邮件



这是我在这里的第一次互动。我在谷歌电子表格中编写了一个脚本,从表格中提取数据,并通过电子邮件自动发送。

现在一切都很好,但我有这两个问题,我希望有人可以帮助我解决它:

问题1:

提取的数据不包括表的最后一行,如果表有50行,则只提取49行。

第二个问题是:我有一个包含客户姓名和客户电子邮件地址的表。
假设同一客户有2封邮件,我应该为同一客户创建2行还是可以将这两封邮件添加到一个单元格中?

例子:

客户1 import@customer1.com客户1 Marketing@customer1.com

客户1 import@customer1.com;marketing@customer1.com(在一个单元格中)

提前谢谢你

代码如下:

function myFunction() {
vs = SpreadsheetApp.getActiveSpreadsheet();
var i;
var j;
var k;
var l;
var name;
var dsCustName;
var custSheetLastRow;
var emailAddress;
var emailSubject;
var emailMessage;
var emailName;
ds = vs.getSheets()[0];
var mainSheetLastRow = ds.getLastRow();
var shtName = ds.getName();
Logger.log(shtName);
var date = Utilities.formatDate(new Date(), "GMT-5:30", "dd/MM/yyyy");
var custNameDate = new Date();
ts = vs.getSheetByName('Email');
cs = vs.insertSheet('Customer Name' + date);
cs.getRange('A1').setValue('Customer Names');
cs.setColumnWidth(1, 250);
cs.getRange('A2').setFormula('=UNIQUE(Sheet1!G2:G' + mainSheetLastRow + ')');
var custNameLastRow = cs.getLastRow();
for (i = 2; i <= custNameLastRow; i++) {
name = cs.getRange('A' + i).getValue();
vvs = SpreadsheetApp.create(name + custNameDate);
dds = vvs.getActiveSheet();
var dataToCopy = ds.getRange('A1:J' + mainSheetLastRow);
var lastRow = dds.getLastRow();
for (k = 1; k <= 9; k++) {
var Paste = dds.getRange(lastRow + 1, k).setValues(dataToCopy.getCell(1, k).getValues());
}
for (var j = 1; j <= mainSheetLastRow; j++) {
var dataToCopy = ds.getRange('A1:J' + mainSheetLastRow);
var lastRow = dds.getLastRow();
dsCustName = ds.getRange('G' + j).getValue();
if (name == dsCustName) {
for (k = 1; k <= 9; k++) {
var Paste = dds.getRange(lastRow + 1, k).setValues(dataToCopy.getCell(j, k).getValues());
}
}
}
var emailLastRow = ts.getLastRow();
for (l = 2; l <= emailLastRow; l++) {
emailName = ts.getRange('A' + l).getValue();
emailAddress = ts.getRange('B' + l).getValue();
emailSubject = ts.getRange('C' + l).getValue();
emailMessage = ts.getRange('D' + l).getValue();
if (name == emailName) {
try {
var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + vvs.getId() + "&exportFormat=xlsx";
var params = {
method: "get",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
muteHttpExceptions: true
};
var blob = UrlFetchApp.fetch(url, params).getBlob();
blob.setName(dds.getName() + ".xlsx");
MailApp.sendEmail(emailAddress, emailSubject, emailMessage, { attachments: [blob] });
} catch (f) {
Logger.log(f.toString());
}
}
}
var files = DriveApp.getFilesByName(name + custNameDate);
while (files.hasNext()) {
var file = files.next();
file.setTrashed(true);
}
}
cs.activate();
vs.deleteActiveSheet();
}

很可能在您的for循环中存在一次性错误。要包含所有行,使用forEach()循环,如下所示:

function moot() {
const sheet = SpreadsheetApp.getActiveSheet();
const values = sheet.getDataRange().getDisplayValues();
values.forEach(row => {
const name = row[0];
const emailAddress = row[10];
// ...
}
}

指定多个电子邮件地址,但地址在同一单元格中以逗号分隔。

最新更新