在使用自定义应用脚本功能时,如何修复过滤器不匹配问题



我是一个人力资源,他在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

最新更新