【问题标题】:Google Sheets Script - Not Recognizing SheetGoogle 表格脚本 - 无法识别表格
【发布时间】: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


【解决方案1】:

既然您提到getActive()getActiveSpreadsheet() 都返回null。获取Spreadsheet 对象的最后一个选项是使用以下任一方法:

1. openById(id)

  • 使用给定 ID 打开电子表格

可以从其 URL 中提取电子表格 ID。例如,URL https://docs.google.com/spreadsheets/d/abc1234567/edit#gid=0 中的电子表格 ID 为“abc1234567”。

2。 openByUrl(url)

  • 使用给定的 URL 打开电子表格。如果 URL 不存在或用户无权访问它,则引发脚本异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多