我如何在Google电子表格中运行?

时间:2017-03-12 22:41:23

标签: javascript google-spreadsheet-api

我正在寻找一种使用Google Script迭代响应电子表格的方法(与JavaScript基本相同)。它工作正常,但问题是这段代码不断发送已经通过电子邮件发送的数据的电子邮件。我知道JavaScript很少,但我认为删除前一行并且只迭代一行是有意义的。这是迄今为止的代码:

function autoEmail() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2;
var numRows = 2;
var dataRange = sheet.getRange(startRow, 1, numRows, 7)
var data = dataRange.getValues();
for (i in data) {
var column = data[i];
var emailAddress = "OMITTED FOR PRIVACY";
var message = column[3] + ", who is a " + column[4] + " Scout, wants to have a " + column[6] + " on " + column[5] + ". You can contact him at " + column[1] + ". This is an automated email sent by OMITTED FOR PRIVACY.";
var subject = column[3] + " Wants To Rank Up!";
MailApp.sendEmail(emailAddress, subject, message);
}
}

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

所以,您说要处理当前行,然后将其删除,以免意外重新处理它?看似合理,但如果出现问题,最好不要删除您的数据。也许你可以写完"完成"在每行末尾的空列中,并在发送新电子邮件之前检查它?

现在有些问题,所以我可以提供更多帮助 -

为什么要提取两行(numRows = 2)?看起来你想要只获取一行,或者N(条目数)行。

另外,我总是听说在Javascript中使用普通for循环更好...

for (var colNum = 0; colNum < data.length; colNum++) {
    var column = data[colNum];

...而不是for-in循环......

for (i in data) {
    var column = data[i];

在类似数组的对象上,因为&#34;继承属性也被枚举&#34; (more info here)。

编辑:说到这一点,当你这样做时

for (i in data) {
    var column = data[i];

尝试在循环i中记录Logger.log(i);,因为我认为i可能是一段数据,而不是二维数组中的索引。

结束编辑

免责声明:我知道Stack Overflow并不建议在答案中要求澄清,但我还没有足够的声誉来添加&#34;评论&#34;。 : - )