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

Google Apps Script发送Sheet指定范围邮件无法保留表格格式

Google Apps Script 发送Sheet表格邮件保留原格式方案

问题描述

现有脚本可正常从Google Sheet的Summary工作表提取B2:AA49范围内容发送邮件,但邮件内的表格内容未保留原表格排版,仅显示无格式的拼接文本。
当前使用的代码如下:

function B2B() {

  var summary = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Summary");
  var subject = "B2B - Delivery Status on";
  var recipient = "******@***.in";
  var dataRange = summary.getRange('B2:AA49'); 
  var data = dataRange.getValues();
  summary.getRange(2, 2, 25, 25).getValue;
  var body = "I just discovered Apps Script and it's so cool!" + data;
  MailApp.sendEmail(recipient, subject, body);

}

问题原因

  • 通过getValues()拿到的data是二维数组结构,直接和字符串拼接时,JS会自动把数组转成逗号分隔的纯文本,不会生成表格结构
  • 原代码调用MailApp.sendEmail时仅传入了纯文本正文参数,没有传入可渲染排版的HTML格式正文,无法展示表格样式
  • 代码中summary.getRange(2, 2, 25, 25).getValue;是无效语句,既没有赋值也没有实际作用,属于冗余代码

修改后代码

核心逻辑是将提取到的二维数组拼接为标准HTML表格结构,发信时传入htmlBody参数渲染表格,同时保留纯文本正文兼容不支持HTML的邮件客户端:

function B2B() {
  var summary = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Summary");
  // 主题补充发件当天日期,方便邮件归档区分
  var subject = "B2B - Delivery Status on " + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd");
  var recipient = "******@***.in";
  // 提取指定范围数据,删除原冗余取值代码
  var dataRange = summary.getRange('B2:AA49'); 
  var data = dataRange.getValues();

  // 拼接HTML正文
  var htmlContent = "<p>I just discovered Apps Script and it's so cool!</p>";
  // 定义基础表格样式,边框合并、单元格内边距调整,和Sheet默认样式接近
  htmlContent += "<table border='1' cellpadding='6' cellspacing='0' style='border-collapse: collapse;width:100%;'>";
  // 逐行逐单元格拼接表格内容
  for (var i = 0; i < data.length; i++) {
    htmlContent += "<tr>";
    for (var j = 0; j < data[i].length; j++) {
      // 第一行作为表头用th标签,加粗显示
      var cellTag = i === 0 ? "th" : "td";
      htmlContent += `<${cellTag} style='border:1px solid #ccc;padding:6px;'>${data[i][j]}</${cellTag}>`;
    }
    htmlContent += "</tr>";
  }
  htmlContent += "</table>";

  // 纯文本备用正文,兼容不支持HTML的邮件客户端
  var plainText = "I just discovered Apps Script and it's so cool!\n本邮件包含表格内容,请使用支持HTML格式的邮件客户端查看完整排版。";

  // 发送邮件
  MailApp.sendEmail({
    to: recipient,
    subject: subject,
    body: plainText,
    htmlBody: htmlContent
  });
}

可选优化

  • 如果需要1:1还原Sheet内的单元格样式(背景色、字体、对齐方式等),可以同步调用getBackgrounds()、getFontWeights()、getHorizontalAlignments()等方法获取对应单元格的样式参数,拼接时写入对应标签的style属性即可
  • 如果单元格包含日期、货币等特殊格式内容,可以在拼接单元格时单独做格式化处理,避免显示为Sheet内部存储的原始序列值
  • 可以给表头行添加背景色、调整列宽,进一步提升邮件内表格的可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:31:13