首页 > 解决方案 > Google表格,如何向每位客户发送带有附件的电子邮件

问题描述

我有一张带有一些选项卡的工作表,在一个选项卡中我为我的客户做声明,我在 B2 中选择一个客户并使用查询公式我得到所需的数据,之后我有一个脚本来首先隐藏空白行然后以 pdf 作为附件发送该电子邮件,我仅在需要发送该电子邮件时才进行精简。

在此处输入图像描述

这是我的脚本:

  function HideEdoCta() {

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getSheetByName('Edo Cta');
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange(1, 4, lastRow, 1);
  var data = range.getValues();

  //Rows
  for (var i = 0; i < data.length; i++) {
    if (data[i][0] == 1) {
      sheet.hideRows(i + 1)
    }
  }
  sheet.hideColumns(4, 1)

}

function UnHideEdoCta() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Edo Cta');
  sheet.unhideRow(sheet.getDataRange());
}


function MailEdoCta(email, subject, body, sheetName) {

  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getSheetByName('Edo Cta');
  var valueToCheck = sheet.getRange('C1').getValue();

  if (valueToCheck == true && casa != '') {

    HideEdoCta()

    SpreadsheetApp.flush()

    var email = sheet.getRange('D1').getValue();  // Enter the required email address here
    var casa = sheet.getRange('B2').getValue();
    var subject = 'Estado de Cuenta Sky';

    var body =
      "Hola, <strong>" + casa + "</strong><br><br>" +
      "xxx.<br>" +

      "-- <br>" +
      "<strong>xxx</strong><br>"
      ;

    // Base URL
    var url = "https://docs.google.com/spreadsheets/d/SS_ID/export?".replace("SS_ID", ss.getId());

    var url_ext = 'exportFormat=pdf&format=pdf' // export as pdf / csv / xls / xlsx
      + '&size=letter'                          // paper size legal / letter / A4
      + '&portrait=true'                        // orientation, false for landscape
      + '&scale=1'                              // 1= Normal 100% / 2= Fit to width / 3= Fit to height / 4= Fit to Page
      + '&fitw=true&source=labnol'              // fit to page width, false for actual size
      + '&sheetnames=false&printtitle=false'    // hide optional headers and footers
      + '&pagenumbers=true&gridlines=false'     // hide page numbers and gridlines
      + '&fzr=false'                            // do not repeat row headers (frozen rows) on each page
      + '&gid=';                                // the sheet's Id

    var token = ScriptApp.getOAuthToken();

    var response = UrlFetchApp.fetch(url + url_ext + sheet.getSheetId(), {
      headers: {
        'Authorization': 'Bearer ' + token
      }
    }).getBlob().setName(sheet.getName() + ".pdf");

    // Uncomment the line below to save the PDF to the root of your drive. 
    //  var newFile = DriveApp.createFile(response).setName(sheet.getName() + ".pdf")


    GmailApp.sendEmail(email, subject, "",
      { name: 'xxx', htmlBody: body, attachments: [response] }
    );

    SpreadsheetApp.flush()
    UnHideEdoCta()

    sheet.getRange('C1').setValue(false)
    sheet.getRange('B2').clearContent()
  }
  else {
    sheet.getRange('C1').setValue(false)
  }

}

在这个脚本中,我有一个验证,如果在 B2 中选择了一个客户并且 C1 为真,请发送电子邮件,因为触发器设置为每分钟运行一次。

现在我需要的是每月 5 日自动向我的所有客户发送相同的电子邮件(我只有 24 个客户)

如果不一一选择,我怎么能做到这一点?

请问有什么帮助吗?

这是带有示例数据的示例表

标签: google-apps-scriptgoogle-sheets

解决方案


尝试这个

function mailing() {
  var doc = SpreadsheetApp.getActive();
  var sh = SpreadsheetApp.getActiveSheet();
  var data = doc.getRange('listOfCustomers').getValues();
  for (var i = 0; i < data.length; i++) {
    if (data[i][1]) {
      sh.getRange('B2').setValue(data[i][0]); 
      SpreadsheetApp.flush();
      Utilities.sleep(1000);
    }
  }
};

您的电子表格副本将不胜感激进行测试。


推荐阅读