如何编写Google Sheets脚本在SP单元格值达到目标值时触发邮件通知
Google Sheets SP值达标自动邮件通知实现方案
1. 保留原有ASX价格获取自定义函数
你当前使用的价格计算函数无需修改,保留即可:
function ASXLASTPRICE(asx_stock) { var tickervar = asx_stock.substring(asx_stock.indexOf(":") + 1); var url = "https://www.asx.com.au/asx/1/share/" + tickervar; var response = UrlFetchApp.fetch(url); var content = response.getContentText(); Logger.log(content); var json = JSON.parse(content); var last_price = json["last_price"]; return last_price; }
2. 新增表格辅助列
在现有表格最后加2列辅助字段,避免重复发送通知:
- 目标SP值列:填写每个标的对应的触发阈值,也可以统一设置固定值
- 通知状态列:用来标记该标的是否已经触发过通知,无需手动填写
3. 新增监测+邮件通知脚本
在Apps Script编辑器中新增以下代码,按注释修改配置项:
// 请根据你的表格实际情况修改以下配置参数,A列对应序号1 const CONFIG = { SP_COLUMN: 19, // SP值所在列的序号,按实际调整 TARGET_SP_COLUMN: 20, // 目标SP值所在列的序号,按实际调整 NOTIFY_STATUS_COLUMN: 21, // 通知状态列的序号,按实际调整 HEADER_ROW_COUNT: 1, // 表头行数,检测时会自动跳过表头 RECIEVE_EMAIL: "你的收件邮箱@xxx.com", // 替换为实际收信邮箱 SHEET_NAME: "Sheet1" // 替换为你要监测的工作表名称 } function checkSPAndSendNotify() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(CONFIG.SHEET_NAME); const allRowData = sheet.getDataRange().getValues(); // 遍历所有数据行,跳过表头 for (let rowIndex = CONFIG.HEADER_ROW_COUNT; rowIndex < allRowData.length; rowIndex++) { const currentRow = allRowData[rowIndex]; const currentSP = currentRow[CONFIG.SP_COLUMN - 1]; // 数组下标从0开始,所以列号要减1 const targetSP = currentRow[CONFIG.TARGET_SP_COLUMN - 1]; const notifyStatus = currentRow[CONFIG.NOTIFY_STATUS_COLUMN - 1]; // 校验:当前SP、目标值均有效,SP达到目标,且未发送过通知 if (currentSP && targetSP && currentSP >= targetSP && !notifyStatus) { // 发送通知邮件 MailApp.sendEmail({ to: CONFIG.RECIEVE_EMAIL, subject: `SP值达标提醒:当前SP${currentSP}已达到目标值${targetSP}`, body: `你设置的SP阈值提醒已触发: 标的名称/代码:${currentRow[0]} 当前SP值:${currentSP} 预设目标SP值:${targetSP} 请登录Google Sheets查看最新数据。` }) // 标记已通知,避免重复触发 sheet.getRange(rowIndex + 1, CONFIG.NOTIFY_STATUS_COLUMN).setValue("已通知"); } } }
如果你不需要分标的设置不同阈值,直接把判断条件里的targetSP替换为固定数值即可
4. 配置自动触发器
实现定时自动检测不需要手动运行脚本:
- 打开Apps Script编辑器左侧的「触发器」菜单
- 点击右下角「添加触发器」
- 选择要运行的函数:
checkSPAndSendNotify - 选择事件源:「时间驱动」
- 选择触发器类型:「分钟计时器」,间隔建议设置为15分钟(可根据需求调整,不要设置过短避免触发ASX接口限流)
- 保存触发器,首次运行时按提示完成Google账号授权即可
数据样例参考

注意事项
- Google个人账号的Apps Script每日邮件发送配额为100封,企业账号配额更高,可根据用量调整检测频率
- 如果遇到
ASXLASTPRICE函数刷新不及时的情况,可以在checkSPAndSendNotify函数第一行添加sheet.getDataRange().setFormulas(sheet.getDataRange().getFormulas())强制触发所有公式重算
内容的提问来源于stack exchange,提问作者Desmond Yjw
相关产品推荐
相关产品推荐

