无法在单元格上设置值

时间:2018-12-19 15:45:58

标签: google-apps-script spreadsheet google-sheets-api

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

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

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")

他们都没有工作。

1 个答案:

答案 0 :(得分:3)

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

  • 您选择“ A2:G6”,然后单击“发送”按钮。
  • 运行功能send()时,您要发送包含从每一行检索到的值的电子邮件。
  • 发送电子邮件后,您要将“已发送”的值放在“ H”列中。

如果我的理解是正确的,那么该修改如何?

修改点:

  • 我认为GmailApp.sendEmail()上方的脚本很好。
  • 为了将“已发送”的值放入“ H”列,它使用了range检索到的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
}