【发布时间】:2022-10-24 16:58:37
【问题描述】:
我有一张每分钟从 API 中提取数据的工作表。每行都包含有关单个 NFT 的信息,这些信息显示了在给定的一天对 NFT 所做的事情。对于每一行/NFT,数据每天在不同的时间重置一次。我拥有的脚本在它重置之前存档每一行以记录在该 24 小时期间发生的事情。
问题是,脚本并不总是在我的辅助单元格中提取实时更新。最后一天我一直在记录调试,我可以看到有时它会提取实时数据,有时它会提取相同的数据长达 4 分钟。换句话说,一行的倒计时时钟可能会在第一次运行脚本时显示 10 分钟,然后在工作表中它会更改为 9 分钟,但脚本会再次拉出 10 分钟。这可能会在剩余 8 分钟和 7 分钟时再次继续,脚本仍然显示 10 分钟。最后,在 6 分钟时,脚本将再次获取实时数据并显示 6 分钟。我的脚本也以电子表格刷新开始。
我只发现一年前报告过这个类似的问题,但我没有看到它在任何地方得到解决: Script pulling old data 我同意那张海报的假设,似乎 Google Script 是从表单的缓存版本中提取的。此错误的随机性导致我的存档出现重大问题,因此我试图弄清楚是否可以强制重新读取工作表,或者是否有关于此延迟的已知信息,以便我可以说明为此,通过适当的错误处理(例如,当前辅助单元格连续标记一行要存档 4 分钟,并在存档后删除该标志,但我不确定是否需要更长的时间)
作为参考,这是有时会提取缓存数据的代码,以防我可以添加一些内容以强制重新读取(也许从单元格中添加和删除数据只是为了使其访问工作表?):
function saveHabs() {
var dateStamp = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var habSheet = ss.getSheetByName("Harvests");
SpreadsheetApp.flush;
var beVals = habSheet.getRange("be2:be").getDisplayValues();
var habs = beVals.filter(String).length;
var dataSheet = ss.getSheetByName("New Historical");
var aVals = dataSheet.getRange("a:a").getDisplayValues();
var firstRow = aVals.filter(String).length+1;
Logger.log(habs)
var archiveDetails;
if (habs>0){
archiveDetails = habSheet.getRange("be2:bi"+(habs+1)).getDisplayValues();
dataSheet.getRange(firstRow,1,habs,5).setValues(archiveDetails);
dataSheet.getRange(firstRow,6,habs,1).setValue(dateStamp);
dataSheet.getRange(firstRow,6,habs,1).setNumberFormat("@");
}
Logger.log(archiveDetails);
//debugging logs
var totalCount = habSheet.getRange("BM:BM").getDisplayValues().filter(String).length;
Logger.log(totalCount);
var logFlags = habSheet.getRange("BM2:BP"+totalCount).getDisplayValues();
console.log(habs+" habitats to archive, below are the flags and time remaining (ignore second column, that's only for unharvested habs)");
console.log(logFlags);
}
这是 MRE 工作表的简化版本:https://docs.google.com/spreadsheets/d/1od2G4i2YOJleQ6Ph0ICH-XC7L-SsINF8uBEivOsicTY/edit?usp=sharing 它当前每分钟都在运行,日志应该显示相同的错误 - 也就是说,BM 列中的倒计时不会总是在每次新脚本运行时下降,而是脚本会提取剩余的缓存时间。
【问题讨论】:
-
我真的很想在这里写出彻底的问题,但我又被否决了,很快就无法发帖了。有人可以解释一下我在这里做错了什么吗?
-
你好,你能提供一个minimal reproducible example吗?