使用している Google スクリプトがあり、作業中の現在の行を、スプレッドシートに設定した式に再追加される値に挿入したいと考えていました。誰かが同じデータを再送信した場合に備えてこれを行いたいので、変更がメールで送信されます。現時点では、このスクリプトは概念実証に過ぎないため、プロセス全体をコーディングしていくことができます。
私がスクリプトで抱えている問題は、currentRow の値にあります。最初のパスの値を取得したようで、それを変更しないようです。これは、処理するエントリが複数ある場合に問題になります。
変数 RESEND_EMAIL で値 currentRow を使用して、2 つの列が似ているかどうかを確認する式を生成できるようにします (日付タイム スタンプを使用して、最初だけ列 D にコピーします (これも既知です) var resend [4] として)。
このようにして、スクリプトを自動的に実行するように設定し、この列が「はい」に設定されているかどうかを確認できます。その場合、送信して再度電子メールを送信し、値を変更します (ここでは電子メール アドレスとして表示されますが、タイムスタンプを使用します)。代わりに)式 RESEND_EMAIL が「いいえ」に再送信を変更するようにします。
値 currentRow の正しい行番号を常に取得するにはどうすればよいですか?
// 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 = 2; // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 6)
// 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 resend = row[4];
var extension = row [5];
var currentRow = sheet.getActiveRange().getRow();
var RESEND_EMAIL = "=IF(A"+ currentRow +"=D" + currentRow +",\"No\",\"Yes\")";
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
var subject = "Sending emails from a Spreadsheet";
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
sheet.getRange(startRow + i, 5).setFormula(RESEND_EMAIL);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
if (resend == "Yes") { // Prevents sending duplicates
var subject = "Sending emails from a Spreadsheet";
message = message + " " + extension;
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 4).setValue(emailAddress);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}