You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GAS自定义函数问题:无法按序列返回下一项替代活动

自定义函数实现问题求助

功能需求

  • 在Calendar table行中放置自定义函数,识别相邻的Workout Type
  • 根据Workout Type,从Alternate Activities中返回下一个活动名称
  • 若匹配的活动是该Workout Type的最后一项,则重新开始循环

效果对比

理想状态下电子表格显示效果:
理想电子表格效果

实际返回的不符合预期的效果:
实际电子表格效果

当前使用的自定义函数代码

/**
*@customfunction
*@NotOnlyCurrentDoc
*/
function altNxt(parameterRowNumber, parameterColNumber) 
{
  var ss = SpreadsheetApp.getActive();
  var startRow = 3; //define start row - Far too static. Any change in sheet makes the function fail
  var startCol = 2; //define start col - Far too static. Any change in sheet makes the function fail
  var endRow = parameterRowNumber; 
  
  var numRows = (endRow - startRow) + 1;
  var numColumns = 7; 
  var sheet = SpreadsheetApp.getActive().getActiveSheet().getRange(startRow, startCol, numRows, numColumns);
  var largeArray = sheet.getValues();  
  
  var arrayColPosition = parameterColNumber - startCol;
  var arrayRowPosition = parameterRowNumber - startRow; 
  var trigger = false;

  var finalArray = largeArray.map((r, i) => i == arrayRowPosition ? r.map((y, c) => c == arrayColPosition ? y[arrayColPosition] = '*' : y) : r);
  
  var calendar_array = finalArray.map((r, indexRow) => r.map((c, indexColumn) => {
    if(c == '*') trigger = true;
      if(indexColumn >= arrayColPosition && trigger || indexRow > arrayRowPosition ){
        return '';
      }else{
        return c;
      }
  }));

  var sheet2 = SpreadsheetApp.getActive().getActiveSheet().getRange(25, 1, 21, 2);
  var alternative_activities = sheet2.getValues();
  
  //This is to set the cell position relative to the ARRAY, not the spreadsheet
  var arrayRowPosition = parameterRowNumber - startRow; 
  var arrayColPosition = parameterColNumber - startCol;

  for (row = calendar_array.length - 1; row >= 0; row--)
  {
    for (column = calendar_array[0].length - 1; column >= 0; column--)
    {
      for (row2 = 0; row2 <= alternative_activities.length; row2++)
      {
        for (column2 = alternative_activities[0].length - 1; column2 >= 0; column2--)
        {
          if (calendar_array[row][column] != "")
          {
           if (calendar_array[row][column] == alternative_activities[row2][column2] && calendar_array[row][0] == alternative_activities[row2][0])
           {
             return alternative_activities[row2+1][1];
           }
          }
        }
      }
    }
  }
}

恳请帮忙解决该问题,感谢!

内容的提问来源于stack exchange,提问作者Drew254

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:25:29