【发布时间】:2021-09-07 06:38:15
【问题描述】:
我有一张 Google 表格。 我去了工具>脚本编辑器。
当工作表中有新行时,我想发送一封电子邮件。 下面是我的脚本。 调试时 ss 变量似乎已设置但为空。 因此,当我到达 getSheetByName 时,它也为空。 我不知道为什么它没有得到这张表。
// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = 'EMAIL_SENT';
/**
* Sends non-duplicate emails with data from the current spreadsheet.
*/
function sendEmails() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Pricing Changes');
var startRow = 2; // First row of data to process
var numRows = 0; // Number of rows to process
numrows = sheet.getLastRow();
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, 3);
// 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 vdate = row[0]; // First column
var vasin = row[1]; // Second column
var vcurrentprice = row[2]; // Third column
var vnewprice = row[3]; // Third column
var vremarks = row[4]; // Third column
var emailsent = row[5]; // Third column
var message = vdate & "-" & vasin & "-" & vcurrentprice & "-" & vnewprice & "-" & vremarks;
if (emailSent !== EMAIL_SENT) { // Prevents sending duplicates
var subject = 'Sending emails from a Spreadsheet';
MailApp.sendEmail(emailAddress, "New Price Changes", message);
sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
请注意,我已将其设置为文件,因为它之前设置为“代码”,但我认为这可能是问题所在。 (我无法嵌入图像,因此希望堆栈会放置正确的图像链接。) App Script UI Screen Shot
【问题讨论】:
-
可以分享样张吗? Share a test sheet。即使您重新打开工作表文件,问题是否一致?您也可以尝试使用
var ss = SpreadsheetApp.getActive(); -
我从 getactive 开始但得到了相同的结果。
-
我认为共享在工作环境中是不可行的。我无法制作工作表的副本并与外部用户共享,也无法将其副本移动到个人 Google 云端硬盘,因为它是工作产品。我将包含一个示例表/图像。
标签: google-apps-script google-sheets