В вашем коде отсутствует мелкая деталь. По сути, вы должны получать данные из столбца D при использовании getRange
:
var numRows = sheet.getLastRow() - startRow + 1; // Number of rows to process
var startCol = 1;
var numCols = 4; // Number of columns to process (should include column D)
// Fetch the range of cells A2:D
var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);
Обратите внимание, что количество строк, которые нужно извлечь, не нужно жестко кодировать. Если вы используете getLastRow , вы можете получить индекс последней строки с контентом и использовать его для получения желаемого диапазона. Таким образом, вы можете получить ровно столько строк, сколько хотите;не больше, не меньше.
Затем внутри цикла извлеките значение в столбце D, например:
var fileName = row[3]; // Fourth column
Наконец, вы извлекаете файл с диска следующим образом:
var files = DriveApp.getFilesByName(fileName);
Таким образом, полный измененный код может выглядеть следующим образом:
// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = "EMAIL_SENT";
function sendEmails2() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getLastRow() - startRow + 1; // Number of rows to process
var startCol = 1;
var numCols = 4; // Number of columns to process (should include column D)
// Fetch the range of cells A2:D
var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i = 0; i < data.length; i++) {
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var emailSent = row[2]; // Third column
var fileName = row[3]; // Fourth column
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
var subject = "Sending emails from a Spreadsheet";
var files = DriveApp.getFilesByName(fileName);
if (files.hasNext()) {
var file = files.next();
MailApp.sendEmail(emailAddress, subject, message, {
attachments: [file], // No need to use getAs if your file is already a PDF
name: 'Custom email Team'
});
sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
}
Я внес несколько небольших изменений в этот код (например, изменив переменную file
на files
изатем определение var file = files.next()
).
Надеюсь, это вам поможет.