首页 > 解决方案 > 无法在单元格上设置值

问题描述

我可以使用 Google 电子表格一次发送多封电子邮件。

现在,我正在尝试使用已发送电子邮件的信息设置一个单元格。

function enviar() {
  var app = SpreadsheetApp
  var sheet = app.getActiveSheet()
  var range = sheet.getActiveRange()
  var contact = range.getValues()
  for (var i = 0; i < contact.length; i++) {
    var email = contact[i]
    GmailApp.sendEmail(email[3], email[5], email[6])
    email[7].setValue("enviado")
    email[7].setBackground("green")
    email[7].setFontColor("white")
  }
}

问题出在以下三行:

email[7].setValue("enviado")
email[7].setBackground("green")
email[7].setFontColor("white")

我找不到其他方法来获得范围:

SpreadsheetApp.getActiveSheet().getRange("H2")

另一个想法是:

range[0].getRange()[7].setValue("enviado")

他们都没有工作。

标签: google-apps-scriptgoogle-sheets

解决方案


使用共享电子表格时,我可以理解以下内容。

  • 您选择“A2:G6”并单击“发送”按钮。
  • 运行该函数send()时,您希望使用从每一行检索到的值发送电子邮件。
  • 发送电子邮件后,您希望将“已发送”的值放入“H”列。

如果我的理解是正确的,那么这个修改呢?

修改点:

  • 我认为上面的脚本GmailApp.sendEmail()很好。
  • 为了将“sent”的值放到“H”列中,它使用range了retrieves by sheet.getActiveRange()

修改后的脚本:

function send() {
  var app = SpreadsheetApp
  var sheet = app.getActiveSheet()
  var range = sheet.getActiveRange()
  var contact = range.getValues()
  for (var i = 0; i < contact.length; i++) {
    var email = contact[i]
    GmailApp.sendEmail(email[3], email[5], email[6]);
  }
  range.offset(0, 7, range.getNumRows(), 1).setValue("sent"); // Added
}
  • offset(0, 7, range.getNumRows(), 1)表示“H”列的范围。
    • 选择“A2:G6”时,变为“H2:H2”。对于此范围,放置“已发送”。
    • 在这种情况下,例如,如果选择“A2:F6”,则范围变为“G2:G6”。

参考:

添加:

如果您想通过仅选择 1 列来发送电子邮件并放置状态,那么这个脚本怎么样?在此脚本中,例如,选择“A2:A3”或“C2:C3”,发送具有从每行检索到的值的电子邮件,并将“已发送”放入“H2:H3”。

function send() {
  var app = SpreadsheetApp
  var sheet = app.getActiveSheet()
  var range = sheet.getActiveRange()
  var rng = sheet.getRange(range.getRow(), 1, range.getNumRows(), 7); // Added
  var contact = rng.getValues(); // Modified
  for (var i = 0; i < contact.length; i++) {
    var email = contact[i]
    GmailApp.sendEmail(email[3], email[5], email[6]);
  }
  rng.offset(0, 7, range.getNumRows(), 1).setValue("sent"); // Added
}

推荐阅读