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
相关产品推荐
相关产品推荐

