在邮件合并 Google 表格中创建超链接 代码:输出:

问题描述

我在 Google 表格中创建了独特的预填 Google 表单链接,并希望使用邮件合并为每位参与者发送此唯一链接

链接有效 thanks to the help. 但我想在模板的文本中嵌入超链接,而不是直接发送链接。有什么建议吗?仍在尝试使用其他人的模板学习应用程序脚本,因此我们不胜感激。非常感谢!

电流输出

enter image description here

预期产出

enter image description here

const RECIPIENT_COL  = "Email";
const EMAIL_SENT_COL = "Email Sent";
 
function onopen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('Mail Merge')
      .addItem('Send Emails','sendEmails')
      .addToUi();
}
 
function sendEmails(subjectLine,sheet=SpreadsheetApp.getActiveSheet()) {
   if (!subjectLine){
    subjectLine = browser.inputBox("Mail Merge","Type or copy/paste the subject line of the Gmail " +
                                      "  ",browser.Buttons.OK_CANCEL);
                                      
    if (subjectLine === "cancel" || subjectLine == ""){ 
    // if no subject line finish up
    return;
    }
  }
  
  // get the draft Gmail message to use as a template
  const emailTemplate = getGmailTemplateFromDrafts_(subjectLine);
  
  // get the data from the passed sheet
  const datarange = sheet.getDatarange();
  const data = datarange.getdisplayValues();

  // assuming row 1 contains our column headings
  const heads = data.shift(); 
  
  const emailSentColIdx = heads.indexOf(EMAIL_SENT_COL);
  
  const obj = data.map(r => (heads.reduce((o,k,i) => (o[k] = r[i] || '',o),{})));

  // used to record sent emails
  const out = [];

  // loop through all the rows of data
  obj.forEach(function(row,rowIdx){
    // only send emails is email_sent cell is blank and not hidden by filter
    if (row[EMAIL_SENT_COL] == ''){
      try {
        const msgObj = fillInTemplateFromObject_(emailTemplate.message,row);

        GmailApp.sendEmail(row[RECIPIENT_COL],msgObj.subject,msgObj.text,{
          htmlBody: msgObj.html,//bcc: 'fusip@gmail.com',//cc: 'fusip@gmail.com',//from: 'fusip@gmail.com',// name: 'fusip@gmail.com',// replyTo: 'a.reply@email.com',// noreply: true,// if the email should be sent from a generic no-reply email address (not available to gmail.com users)
          attachments: emailTemplate.attachments
        });
        // modify cell to record email sent date
        out.push([new Date()]);
      } catch(e) {
        // modify cell to record error
        out.push([e.message]);
      }
    } else {
      out.push([row[EMAIL_SENT_COL]]);
    }
  });
  
  // updating the sheet with new data
  sheet.getRange(2,emailSentColIdx+1,out.length).setValues(out);
  
  function getGmailTemplateFromDrafts_(subject_line){
    try {
      const drafts = GmailApp.getDrafts();
      const draft = drafts.filter(subjectFilter_(subject_line))[0];
      const msg = draft.getMessage();
      const attachments = msg.getAttachments();
      return {message: {subject: subject_line,text: msg.getPlainBody(),html:msg.getBody()},attachments: attachments};
    } catch(e) {
      throw new Error("Oops - can't find Gmail draft");
    }

    function subjectFilter_(subject_line){
      return function(element) {
        if (element.getMessage().getSubject() === subject_line) {
          return element;
        }
      }
    }
  }
  
  function fillInTemplateFromObject_(template,data) {
    let template_string = JSON.stringify(template);
     data['Google Form Link'] = encodeURI(data['Google Form Link']);

    // token replacement
    template_string = template_string.replace(/{{[^{}]+}}/g,key => {
      return data[key.replace(/[{}]+/g,"")] || "";
    });
    return  JSON.parse(template_string);
  }
}

解决方法

您需要将链接括在 href 标记中以创建超链接。

代码:

data['Google Form Link'] = "<a href='" + encodeURI(data['Google Form Link']) + "'>Click Here</a>";

输出:

output

,

这样做:

var value = '=HYPERLINK("www.yourLink.com","Click Here")';