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

Google Apps Script定时发送产品列数据邮件问题求助

问题描述

我有一个单元格列每天早晨会自动填充产品名称列表,希望通过定时运行App Script将这些名称以表格或列表形式发送邮件。目前使用的脚本如下:

function myFunction(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName('For Ordering');  
var data = sheet1.getRange("A1:A50");
var email = "xxxxx@gmail.com"

MailApp.sendEmail(email,"For Ordering","These are the things you need to order today " + data + "      Thank you");

}

我尝试过使用getValue和getDataTable,但前者无效,后者在邮件中仅显示“datatable”;当前脚本发送的邮件中data位置显示“range”,请问我哪里操作出错了?

解决方法

核心问题是没有正确读取单元格内的实际内容,你直接把Range对象、DataTable对象拼进了字符串,邮件里显示的是对象标识,不是产品名称。

具体修正要点:

  • getRange()返回的是Range对象,不是单元格内容,必须用getValues()提取整列数据;
  • getValue()仅能读取单个单元格值,不适合整列数据场景;
  • getDataTable()是用于可视化的对象,无法直接作为文本内容插入邮件。

纯文本列表版脚本

这是最简洁的实现,把产品名称转成清晰的项目列表:

function sendOrderEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName('For Ordering');  
  // 获取A1:A50的所有值,返回二维数组
  var dataArray = sheet1.getRange("A1:A50").getValues();
  var email = "xxxxx@gmail.com";
  
  // 过滤空值并格式化为带破折号的列表
  var orderList = dataArray
    .map(row => row[0]) // 提取单列的每个值
    .filter(value => value !== "") // 移除空单元格内容
    .map(item => "- " + item) // 转为列表项格式
    .join("\n"); // 用换行符拼接所有项
  
  // 组装邮件内容
  var emailBody = "These are the things you need to order today:\n\n" + orderList + "\n\nThank you";
  
  // 发送邮件
  MailApp.sendEmail(email, "For Ordering", emailBody);
}

HTML表格版脚本(更规整的格式)

如果想要邮件里显示表格样式,可以用HTML格式发送:

function sendOrderEmailAsTable() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName('For Ordering');  
  var dataArray = sheet1.getRange("A1:A50").getValues();
  var email = "xxxxx@gmail.com";
  
  // 过滤空行
  var filteredData = dataArray.filter(row => row[0] !== "");
  
  // 构建HTML表格
  var tableHtml = "<table border='1' cellpadding='4'><tr><th>需要订购的产品</th></tr>";
  filteredData.forEach(row => {
    tableHtml += `<tr><td>${row[0]}</td></tr>`;
  });
  tableHtml += "</table>";
  
  // 组装HTML邮件内容,同时提供纯文本降级版本
  MailApp.sendEmail({
    to: email,
    subject: "For Ordering",
    body: "请使用支持HTML的邮箱查看完整内容。",
    htmlBody: `These are the things you need to order today:<br><br>${tableHtml}<br><br>Thank you`
  });
}

定时运行设置

完成脚本编写后,通过Google表格的「编辑」→「当前项目的触发器」,添加一个时间驱动触发器,设置为每天早晨指定时间运行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:27:42