发布于 2019-05-27 08:34:12
FWIW,我刚刚遇到这个问题,罪魁祸首最终成为一个getRange()
将数千行拉入数组的调用。它会定期挂在“正在加载...”消息上。
我通过将该范围放入文档缓存来解决它。它有点kludgy,因为缓存只存储字符串,而不是数组,但是.split(',')
当你需要访问数组时,你可以强制它回到数组中。
(在我的例子中,它是一个单一的数组。可能有一种方法可以使用双数组,通过将每个行或列发送到自己的缓存中,或者一次读取缓存值N个项目,每个N成为它自己的阵列)。
这是我的代码中的相关位:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("mySheet"); //search the "mySheet" sheet
// is the big list already in the cache?
var cache = CacheService.getDocumentCache();
var cached = cache.get("columnValues");
if (cached != null) {
var columnValues = cached.split(','); // take the cached string and make it an array
} else { // it's not in the cache, so put it there
var column = 1; // the column with your index
var columnValues = sheet.getRange(2, column, sheet.getLastRow()).getValues(); // first row is header
cache.put("columnValues",columnValues,60000); // this forces the array into a string as if you used .join() on it
}
这绝对是Apps脚本中的一个错误 - 如果没有超时或错误消息,getRange()不应该挂起。但至少有一个解决方法。这是我打开它的错误,我也从我的工作表中放入了完整的code.gs。
发布于 2019-05-27 09:31:57
一个原因:需要授权的权限。
至于{这个问题,更好地表达了自定义函数的单元格结果,显示了令人作呕的模糊消息“正在加载...错误:加载数据...”},实际上在所有实例都是相同的情况下/类似的自定义函数调用显示此错误,是Google表格需要运行脚本的权限(通常另外:意味着过去它不需要这些),所以代替{表现得恰当:然后提示用户获取这些权限否则返回该错误},Sheets反而挂起了这个令人作呕的模糊错误。
可能需要1个或更多的附加权限:
为了解决这个问题,我明确地运行了我的GAS电子表格代码:单击我的一个自定义菜单函数,然后在“脚本编辑器”中运行我的一个自定义JS函数,特别是'onOpen()',因为这是最全面的。第一个通过弹出'新的权限提升了我,通过弹出'需要授权 应用程序“MM6ZBT(MM6Z83脚本)”需要授权才能运行。'虽然onOpen()也在GAS修改其权限的情况下这样做,因为我们使用了这个工作表。然后,因为我仍然得到这个“正在加载...”错误,我重新加载了网页(所以表格),并且,至少对于这个令人作呕的模糊错误的情况,它已经消失了,计算工作正常: - )
https://stackoverflow.com/questions/-100009055
复制相似问题