You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script统计列值及邮件添加超链接实现方案

Google Apps Script 电子表格自动发邮件功能实现及问题修复

实现需求

  • 无需读取单元格计数结果,直接在脚本内统计指定列的有效值数量,用于确定遍历数据的行数
  • 邮件正文中将指定URL展示为可点击的超链接文本,而非直接显示原始URL

初始版本脚本

function sendEmails() {
  // 填入工作表名称
  var sheetname = 'CFS Open Cases Report' 
  var counter_sheet = 'count of recipients'
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetname);

  // A1是统计A列行数的单元格,改为在脚本内直接统计A2:A范围的有效值
  var row_counter = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(counter_sheet).getRange("A2"); 
  var row_count = row_counter.getValue();
 

  var startRow = 2;  // 第一行待处理数据的行号
  var numRows = row_count;   // 待处理的总数据行数

  // 需要实现URL在邮件正文显示为可点击超链接
  var report_url = "https://google.com";

 
  // 读取A2:D范围的单元格
  var dataRange = sheet.getRange(startRow, 1, numRows, 4)
  // 读取范围内的每行数据
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var first_name = row[0]; // 第一列数据
    var emailAddress = row[3]; // 第四列数据
    
    // HTML格式邮件内容
    var msgHtml = 'message and' + report_url
    ; 
    // 取当前日期作为报告日期
    var report_date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy");
    var report_desc = "Report Name"
    var subject = report_date +' - '+ report_desc; 

            
    // 发送邮件
    MailApp.sendEmail(emailAddress, subject, msgHtml);
  }
}

第一次迭代修改后的脚本

按照需求完成行数统计、超链接拼接后的脚本如下:

function sendEmails() {
  var sheetname = 'Sheet1' // 填入存储收件人信息的工作表名称
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheetname);
  var row_count = sheet.getRange("A2:A" + sheet.getLastRow()).getValues().flat().filter(String).length; // 统计A2:A范围的有效行数
  var startRow = 2; // 第一行待处理数据的行号
  var numRows = row_count; // 待处理的总数据行数
      
  var report_url = "www.google.com";    


  // 读取A2:D范围的单元格
  var dataRange = sheet.getRange(startRow, 1, numRows, 4)
  // 读取范围内的每行数据
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var first_name = row[0]; // 第一列数据
    var emailAddress = row[3]; // 第四列数据
    
    // HTML格式邮件内容
    var msgHtml = 'Hi ' + first_name +',' 
    + '<br/><br/>message here.'
    + '<br/><br/>more message here.'
    + '<br/><br/>and more: '+ '<a href="${report_url}">Go to Google</a>'
    + '<br/><br/>Kind Regards,'
    + '<br/><br/>my name'
    ; 
    // 取当前日期作为报告日期
    var report_date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy");
    var report_desc = "CFS Open Cases Report"
    var subject = report_date +' - '+ report_desc; 

    // 清除HTML标签,将br转换为换行,生成纯文本版本邮件内容
    var msgPlain = msgHtml.replace(/\<br\/\>/gi, '\n').replace(/(<([^>]+)>)/ig, ""); 
    
    // 发送邮件
    MailApp.sendEmail(emailAddress, subject, msgPlain);
  }
}

迭代后出现的问题

发送邮件时HTML格式无法正常渲染,超链接不生效,需要保留换行的同时正确渲染HTML内容,相关代码片段如下:

var msgHtml = 'Hi ' + first_name +',' 
    + '<br/><br/>second line.'
    + '<br/><br/>third line.'
    + '<br/><br/>fourth line ' + `<a href="${report_url}">Go to Google</a>`
    + '<br/><br/>fifth line,'
    + '<br/><br/>sixth line'
    ;    

    // 取当前日期作为报告日期
    var report_date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy");
    var report_desc = "CFS Open Cases Report"
    var subject = report_date +' - '+ report_desc; 

    // 清除HTML标签,将br转换为换行,生成纯文本版本邮件内容
    var msgPlain = msgHtml.replace(/\<br\/\>/gi, '\n').replace(/(<([^>]+)>)/ig, ""); 
    
    // 发送邮件
    MailApp.sendEmail(emailAddress, subject, msgHtml); 
  }

问题根因与最终修复方案

问题根源为MailApp.sendEmail方法的参数使用错误,错误用法为直接将HTML内容作为第三个参数传入:

MailApp.sendEmail(emailAddress, subject, msgHtml); 

MailApp.sendEmail方法的第三个参数默认是纯文本正文,要渲染HTML格式需要显式指定htmlBody字段,修改后的调用方式如下:

MailApp.sendEmail({to: emailAddress, subject: subject, htmlBody: msgHtml});

修改后功能即可正常运行,HTML格式、超链接、换行均可正常展示。


内容的提问来源于stack exchange,提问作者arda0910

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:39:04