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

求助:编写Apps Script实现谷歌表格编辑时发送含日期与库存数据的邮件

解决Google Sheet编辑时自动发送双列数据邮件的问题

嘿,我来帮你搞定这个问题!其实你完全不用嵌套循环,只需要逐行提取日期和库存数量这两列的值,就能把它们一起放进邮件里啦。下面给你两种常见场景的解决方案:

场景1:每次编辑时发送全部库存数据(日期+库存)

如果希望每次编辑表格都把所有行的日期和库存数据发出去,可以用下面的代码:

function sendFullInventoryEmail() {
  // 获取当前活动工作表
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  
  // 假设日期在A列(第1列),库存在B列(第2列),第1行是表头
  // 从第2行开始取数据,取到最后一行,一共2列
  const dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2);
  const allData = dataRange.getValues();
  
  // 构建邮件内容
  let emailContent = "最新库存数据汇总:\n\n";
  allData.forEach(row => {
    // 提取当前行的日期和库存值
    const rawDate = row[0];
    const inventoryQty = row[1];
    
    // 把日期格式化成易读的样式(避免显示成原始时间戳)
    const formattedDate = Utilities.formatDate(
      rawDate, 
      Session.getScriptTimeZone(), 
      "yyyy-MM-dd" // 你可以改成自己需要的格式,比如"MM/dd/yyyy"
    );
    
    // 把每一行的内容追加到邮件里
    emailContent += `日期:${formattedDate} | 库存数量:${inventoryQty}\n`;
  });
  
  // 发送邮件
  MailApp.sendEmail({
    to: "你的目标邮箱@example.com",
    subject: "库存数据更新通知",
    body: emailContent
  });
}

关键说明:

  • getRange(2, 1, sheet.getLastRow()-1, 2):精准定位数据范围,参数分别是「起始行、起始列、行数、列数」
  • getValues()返回的是二维数组,每一个row就是一行的所有数据,直接用row[0]和row[1]就能拿到日期和库存
  • Utilities.formatDate是为了把Sheet里的日期对象转换成友好的字符串,不然邮件里会显示一堆看不懂的时间戳

场景2:只发送被编辑的那一行的双列数据

如果只需要推送刚被编辑的那一行的日期和库存(更实用),可以用触发事件对象e来定位编辑行:

function sendEditedRowEmail(e) {
  const editedRange = e.range;
  const sheet = editedRange.getSheet();
  const editedRow = editedRange.getRow();
  
  // 跳过表头行(如果第1行是表头的话)
  if (editedRow === 1) return;
  
  // 获取当前编辑行的日期和库存值
  const dateValue = sheet.getRange(editedRow, 1).getValue();
  const inventoryValue = sheet.getRange(editedRow, 2).getValue();
  
  // 格式化日期
  const formattedDate = Utilities.formatDate(
    dateValue, 
    Session.getScriptTimeZone(), 
    "yyyy-MM-dd"
  );
  
  // 构建邮件内容
  const emailBody = `库存数据已更新:
日期:${formattedDate}
库存数量:${inventoryValue}`;
  
  // 发送邮件
  MailApp.sendEmail({
    to: "你的目标邮箱@example.com",
    subject: "单条库存更新通知",
    body: emailBody
  });
}

重要提醒:发送邮件需要安装型触发器

不管用哪个版本,都不能直接用简单的onEdit触发器(因为它没有发送邮件的权限),必须创建安装型触发器:

  1. 打开Apps Script编辑器,点击左侧的「触发器」图标(闹钟形状)
  2. 点击「添加触发器」,选择对应的函数名
  3. 事件源选「电子表格」,事件类型选「编辑时」
  4. 保存并授权即可

总结

你之前猜测的嵌套循环其实没必要,因为Sheet的数据本身就是二维数组结构,逐行遍历的时候直接提取同一行的两个列值就好啦。核心是准确获取数据范围,再把日期格式化成友好的样子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:09:36