求助:Google Sheets中基于GOOGLEFINANCE自动更新值的单元格背景变色脚本
Google Sheets EURUSD 自动更新后背景色设置方案
问题分析
原代码报错核心原因:
- 函数参数为
e,但代码中误用未定义的event变量,导致无法读取range属性 - 错误调用
getB8Notation()方法,正确获取单元格A1格式地址的方法是getA1Notation() onEdit触发器仅响应手动编辑操作,GOOGLEFINANCE公式自动更新不会触发该函数,因此即便修正语法也无法实现需求
可行方案
要实现公式自动更新后的背景色变化,需结合属性服务存储历史值和时间驱动触发器定时检查,具体实现如下:
代码实现
function checkEURUSD() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet11'); if (!sheet) return; // 假设EURUSD值在B13单元格,可根据实际位置修改 const targetRange = sheet.getRange('B13'); const currentValue = targetRange.getValue(); if (typeof currentValue !== 'number') return; // 确保读取到有效数值 // 使用文档属性存储上次更新的数值 const docProps = PropertiesService.getDocumentProperties(); const lastStoredValue = docProps.getProperty('lastEURUSD'); // 根据当前值与历史值对比设置背景色 if (lastStoredValue) { const lastValue = parseFloat(lastStoredValue); if (currentValue > lastValue) { targetRange.setBackground('green'); } else if (currentValue < lastValue) { targetRange.setBackground('red'); } // 数值相等时保持原有背景色,可根据需求自定义 } else { // 首次运行初始化背景色 targetRange.setBackground('white'); } // 更新存储的历史值 docProps.setProperty('lastEURUSD', currentValue.toString()); }
配置时间驱动触发器
- 打开目标Google Sheets,点击菜单栏「扩展程序」→「Apps脚本」
- 在脚本编辑器左侧点击「触发器」图标(时钟样式)
- 点击「添加触发器」,按如下配置:
- 选择运行函数:
checkEURUSD - 部署类型:「时间驱动」
- 时间基于:「分钟计时器」
- 间隔:「每5分钟」(可根据需求调整,最短1分钟)
- 点击「保存」并完成脚本权限授权即可
- 选择运行函数:
原代码语法修正(仅作参考,无法响应公式自动更新)
如果仅修正原代码的语法错误(仍无法实现公式更新触发),代码如下:
function onEdit(e) { if (!e || !e.range) return; const ss = e.range.getSheet(); if (ss.getName() !== 'Sheet11') return; const changedCell = e.range; if (changedCell.getA1Notation() !== 'B13') return; const c = e.value; let background = 'white'; if (c > 2) { background = 'red'; } else if (c < 1) { background = 'black'; } changedCell.setBackground(background); ss.getRange('B8').setBackground(background); }
内容的提问来源于stack exchange,提问作者Nick Zouein
相关产品推荐
相关产品推荐

