我是HR,他在IT领域有一点背景,在一家小公司工作。为了使出勤和加班计算自动化,我在App-Script中创建了一个自定义函数,并使用过滤器调用了该函数。它提供了理想的计算方法,但有时会出现“过滤器不匹配”错误,只有在将公式剪切并粘贴到同一位置后才能纠正该错误。
我在App脚本中创建了一个自定义函数,并使用过滤器调用了该函数。
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://imgur.com/a/M4MnOqf
答案 0 :(得分:0)
正如用户在评论中所述,显然您的问题是因为该函数要花费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]将菜单插入到Sheets UI中。使用setFormula()函数[4],可以在单元格中设置带有结果变量的公式。
[1] https://developers.google.com/apps-script/guides/services/quotas
[2] https://developers.google.com/apps-script/guides/triggers/
[3] https://developers.google.com/apps-script/guides/menus
[4] https://developers.google.com/apps-script/reference/spreadsheet/range#setformulaformula