问题描述
我有一个自定义函数,可以从表格单元格中的值向 Telegram 发送消息。
同时创建自动填充,当有许多不同的单元格具有值时,Telegram 警告它已达到同时发送限制,所以我需要找到一种方法为每个公式添加 2 秒的暂停添加到单元格中,不创建发送队列。
我的脚本目前看起来像这样:
var sheetName = "Sheet4";
var sss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = sss.getSheetByName(sheetName);
sheet.getRange('AB1').setFormula('=IF(Z1="","",EnviarTelegram($AA$1,$AA$2,URLredirect(U1),Z1))');
var lr = sheet.getLastRow();
var fillDownRange = sheet.getRange(1,28,lr);
sheet.getRange('AB1').copyTo(fillDownRange);
我的需求示例:
在AB1
中添加公式=IF(Z1="",Z1))
暂停 2 秒
在AB2
中添加公式=IF(Z2="",URLredirect(U2),Z2))
暂停 2 秒
在AB3
中添加公式=IF(Z3="",URLredirect(U3),Z3))
等等...
解决方法
我不会为您构建整个脚本,因为如果我这样做了,那么您将永远不会学会如何自己完成。但这是基本思路
const formulas=['formula1','formula2',....];
const ranges=['range1','range2',....];//you will have to figure out how to do this
formulas.forEach((f,i)=>{
ranges[i].setFormula(f);
spreadsheetApp.flush();
Utilities.sleep(delay in milliseconds);
});
很明显,在运行具有许多数组元素的函数时,您需要注意脚本时间的配额限制。无意给出准确答案。
,添加暂停以添加具有自定义函数的公式并不是一个好主意,因为这些公式将在打开电子表格以及自定义函数参数更改时重新计算。
相反,创建一个调用自定义函数的函数,为其提供相应的参数。