使用数据透视表中的脚本更新其他标签?

时间:2019-07-04 20:07:48

标签: google-apps-script

我是Google编码脚本的新手,遇到了无法解决的问题,我的脚本“ mentor”仍然没有那么丰富的经验,也无法解决。

当我使用脚本发送大量电子邮件时,我正在尝试从数据透视表更新工作表上的其他标签。

因此,下面的链接将带您进入以我的真实图纸为基础的虚拟图纸。 “ PM”标签列L是我要更新的内容。它在所有作业上都从1开始。电子邮件是通过下一个标签“跟进电子邮件”中的蓝色按钮发送的(这只是一个数据透视表,因此我可以随时调整谁可以轻松获取电子邮件)。但是我不知道如何在电子邮件发送出去的同时用按钮更新“ PM”标签。

链接到打开的共享电子表格。如果可以帮助的话,请随时玩。

https://docs.google.com/spreadsheets/d/1_hipIj4suI2xMGUrZhMTBDvkQv9Y9O3JRNNQUpSeAP0/edit?usp=sharing

(到目前为止,只有电子邮件能够正确发送)

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var rows = sheet.getLastRow()
  var dataRange = sheet.getRange(2, 1, rows-1, 7);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddress = row[1]; // Second column
    var message = 'Hello, we have submitted this job ' + row[2] + ' days Ago. ' + row[4] + ' \n\n' + ' -' + row[5]; 
    var subject = row[0]; // First column
    MailApp.sendEmail(emailAddress, subject, message);
  }
}

我需要在“关注电子邮件”选项卡上发送电子邮件的按钮,与此同时,“电子邮件计数器”(L列)将在“ PM”选项卡上添加1。通过这种方式,我可以跟踪工作表中通过电子邮件发送了多少次。

1 个答案:

答案 0 :(得分:0)

尝试以下代码:

function sendEmails() {
  var pmSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PM");
  var emailSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Follow up email");

  var startRow = 2; // First row of data to process
  var rows = emailSheet.getLastRow()
  var dataRange = emailSheet.getRange(2, 1, rows-1, 7);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddress = row[1]; // Second column
    var message = 'Hello, we have submitted this job ' + row[2] + ' days Ago. ' + row[4] + ' \n\n' + ' -' + row[5]; 
    var subject = row[0]; // First column
    MailApp.sendEmail(emailAddress, subject, message);
    updatePM(pmSheet, emailAddress);
  }
}

function updatePM(sheet, email){
  var value;
  var emails = sheet.getRange("G3:G" + sheet.getLastRow()).getValues();
  for (var i = 0; i < emails.length; i++)
    if (emails[i][0] == email){
      value = sheet.getRange("K" + (i+3)).getValue() + 1
      sheet.getRange("K" + (i+3)).setValue(value);
    }
}

为了安全起见,我更改了获取工作表的方式,然后我编写了一个小函数,该函数在发送电子邮件后被调用,该函数检查PM工作表中的电子邮件列表,然后更新已发送表中的值电子邮件列。