当前位置: 首页 > 知识库问答 >
问题:

如何使用谷歌应用程序脚本从另一个工作表中选择数值?

尉迟彬
2023-03-14

我有两个谷歌表单标签,第一个表单有A栏-电子邮件地址,B栏-消息,C栏-状态。第二个sheet2只有一列A列-凭证代码,我在sheet2列A中插入了所有必要的数字。因此,每次运行脚本时,我都会发送电子邮件,并根据sheet1数据的最后一行自动从sheet2中选择数字。发送的电子邮件没有问题,但我无法从电子邮件中的sheet2 Col A获取凭证代码数据。

var EMAIL_SENT = 'EMAIL_SENT';

function sendEmails2() {
var sheet = SpreadsheetApp.getActiveSheet();
  

var sheet2 = SpreadsheetApp.getActive().getSheetByName("Sheet2");
var strRow2 = 2;
var numRows2 = 2;
var dataRange2 = sheet2.getRange(strRow2, 1, numRows2, 1)
 
var data2 = dataRange2.getValue();
  
for (var j = 0; j < data2.length; ++j) {    
var row2 = data2[j];
var code = row2[0];
} 
  
var startRow = 2; 
var numRows = 2; 

var dataRange = sheet.getRange(startRow, 1, numRows, 3);

var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = row[0]; 
var message = row[1] + "\n" + code // this code no working 
var emailSent = row[2]; 
if (emailSent !== EMAIL_SENT) 
var subject = 'Sending emails from a Spreadsheet';
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT); 
SpreadsheetApp.flush();
}
}
}

共有1个答案

鲁涵意
2023-03-14

要查找包含内容的最后一行,应使用:getLastRow()。

以下是解决方案:

function sendEmail() {
  
  var ss = SpreadsheetApp.getActive();
  var sh1 = ss.getSheetByName("Sheet1")
  var sh2 = ss.getSheetByName("Sheet2")
  var EMAIL_SENT = 'EMAIL_SENT';
  
  var sh1_LR = sh1.getLastRow();

  var sh1_EA = sh1.getRange(sh1_LR,1).getValue();
  var sh1_M = sh1.getRange(sh1_LR,2).getValue();
  var sh2_V = sh2.getRange(sh1_LR,1).getValue();
 
  try{
  MailApp.sendEmail(sh1_EA, sh1_M, sh2_V);
  sh1.getRange(sh1_LR,3).setValue(EMAIL_SENT);
  }
  catch(e)
  {Logger.log("sendEmail failed")}     
}
 类似资料:
  • 在谷歌工作表上,尝试根据特定单元格中的值隐藏/取消隐藏行,并尝试在AppsScript中为此编写脚本。发现一个隔离工作(如果B55=NO,则隐藏64行): 但我需要对多个单元格和多行使用相同的方法,只要我展开它,就只有代码的最后一部分有效,而不是第一部分: 从这里开始,B121号牢房开始工作,但我的B55停止工作。有什么提示吗?谢谢!

  • 通过SpreadsheetApp global,使用绑定到电子表格的应用程序脚本来影响工作表非常简单。但是,有一些功能,例如在工作表上获取/设置过滤器,只能从GoogleSheetsRESTAPI访问。 我见过一个例子,它使用应用程序脚本中的UrlFetchApp来调用谷歌工作表应用编程接口,但它的编写方式好像应用程序脚本实际上没有绑定到特定的电子表格。 当我试图从绑定到电子表格的应用程序脚本中调

  • 我有一个谷歌电子表格,有两张叫做罗宾和露西的表格。每次我向列A添加一些数据时,我都制作/找到/破坏了一个脚本来对工作表上的数据进行排序 这个剧本很棒,但我只想把它应用在第一张纸上,罗宾。第二个工作表中的数据,Lucy,是不一样的,所以我将创建另一个脚本为不同的范围,一旦我得到了这个问题的头脑。 我想我需要使用getSheetByName(“罗宾”),但我似乎无法让它工作。提前感谢

  • 在继续使用GoogleApps脚本构建Google电子表格的过程中,我已经完成了获取Bittrex和Poloniex余额的工作,但无法使用Cryptopia。 下面是我与Bittrex将JSON对象数组映射到字符串的斗争的链接 以下是官方API链接:https://www.cryptopia.co.nz/Forum/Thread/256 以下是一些例子: https://www.cryptopia

  • 所以我在谷歌电子表格文档中有两张表格。 表1有一列包含以下数据: 然后SHEET 2有2列,数据如下: 我需要在“表单提交”上运行一个脚本,该脚本执行以下操作: 打开表1(其中记录了ID) 将其与表2的第1列的值按顺序进行比较 当找到匹配时,将电子邮件地址提取到变量var中 有人能帮我吗?这两张表都在同一个谷歌文档中。 非常感谢。 沙希

  • 我想同步两个谷歌日历自动每当有一个更新到其中之一。请注意,这两个日历并不相同。我认为设置一个由日历触发的触发器就足够了。但谷歌文档称 这些触发器不会告诉您哪个事件发生了变化或它是如何变化的。相反,它们表示您的代码需要执行增量同步操作,以获取日历的最新更改。 所以我从谷歌找到了一个完全和增量同步的实现 我使用了上面链接中的函数LogSynceEvents()和getRelativeDate(),没有