我是一个人力资源,他在IT领域有一点背景,在一家小公司工作。为了将自动化带入出勤率和随时间的计算中,我在App-Script中制作了一个自定义功能,并使用过滤器调用该功能。它给出了一个完美的计算,但是在有时,它给出了"过滤器不匹配"误差,仅在同一位置切割和粘贴公式后才能对其进行纠正。
我在App-Script中制作了自定义函数,并使用过滤器调用了该功能。
function calculateOT(otAllowedNotSun, otAllowedSun, data, attendance, day)
{
var result;
if(day=="Sun"){
result = calculateOTSunday(otAllowedSun, attendance, data);
}
else {
result = calculateOTExceptSunday(otAllowedNotSun, attendance, data);
}
return result;
}
//它只是零件函数
我希望自动刷新结果。但是,它给了我"过滤不匹配"结果。
请使用此链接了解更多-https://i.stack.imgur.com/fnyqz.jpg
正如用户在注释中所述的,显然您的问题是因为该功能需要超过30秒才能运行,这是自定义功能的限制[1]。您可以使用触发器(Onedit,Onopen等([2]解决此方法,也可以实现菜单,您可以单击sheets UI内部以运行将公式设置为单元格的功能。这样:
function onOpen() {
SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.createMenu('test')
.addItem('Run...', 'calculateOT')
.addToUi();
}
function calculateOT(otAllowedNotSun, otAllowedSun, data, attendance, day) {
var result;
if(day=="Sun") {
result = calculateOTSunday(otAllowedSun, attendance, data);
}
else {
result = calculateOTExceptSunday(otAllowedNotSun, attendance, data);
}
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet Name");
var formulaCell = sheet.getRange("P5");
formulaCell.setFormula('=FILTER(' + result + ', $B5:$B8<>"")');
}
我使用onopen触发器[3]将菜单插入床单UI中。使用setFormula((函数[4]我设置了与单元格中结果变量的公式。
[1] https://developers.google.com/apps-script/guides/services/quotas
[2] https://developers.google.com/apps-script/guides/guides/triggers/
[3] https://developers.google.com/apps-script/guides/menus
[4] https://developers.google.com/apps-script/reference/spreadsheet/range#setsformulaformula