Google Sheets触发函数前自动刷新问题及代码实现咨询
关于Google Sheet中GOOGLEFINANCE函数刷新与App Script邮件触发的问题解答
1. 调用App Script函数时,Sheet是否默认自动刷新GOOGLEFINANCE数据?
不会默认自动刷新。GOOGLEFINANCE函数的刷新周期由Google控制(通常是几分钟到几十分钟),App Script触发函数时,只会读取当前Sheet缓存中的数据,不会强制触发该函数的即时更新。
2. 如何在代码中实现触发邮件前强制刷新数据?
以下是两种可行的实现方式:
方法一:通过重置公式触发刷新
通过清除并重新写入GOOGLEFINANCE公式,强制触发数据更新:
function refreshFinanceDataThenSendEmail() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("你的工作表名称"); // 替换为GOOGLEFINANCE函数所在的单元格/范围 const financeRange = sheet.getRange("A1:C10"); // 批量保存原公式 const originalFormulas = financeRange.getFormulas(); // 先将公式转为静态值 financeRange.setValues(financeRange.getValues()); // 重新写入原公式 financeRange.setFormulas(originalFormulas); // 强制提交所有操作,等待数据刷新 SpreadsheetApp.flush(); // 等待3-5秒确保数据更新完成,可根据实际情况调整时长 Utilities.sleep(4000); // 调用你的邮件推送函数 sendStockValuationEmail(); }
方法二:刷新缓存后等待读取
通过flush()提交所有待处理操作,再等待足够时间让GOOGLEFINANCE拉取最新数据:
function prepareDataAndSendEmail() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("你的工作表名称"); // 强制刷新所有未提交的Sheet操作 SpreadsheetApp.flush(); // 等待5秒让GOOGLEFINANCE完成数据更新 Utilities.sleep(5000); // 读取最新估值数据 const latestValuation = sheet.getRange("D5").getValue(); // 执行邮件推送 sendStockValuationEmail(latestValuation); }
注意事项
Utilities.sleep()的等待时间需要根据网络状况和数据量调整,避免因等待过短导致读取旧数据。- 如果有大量
GOOGLEFINANCE函数,方法一的批量处理效率更高,但需要确保公式范围准确。
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

