如何在Google Sheets自定义函数中不使用字符串获取下拉列表最大值
解决Google Sheets自定义函数直接传入单元格引用获取下拉列表最大值的问题
问题背景
作为Google Sheets脚本新手,需要实现一个自定义函数提取指定单元格下拉列表的最大值,但遇到单元格引用相关问题:
- 仅通过
=MAXDROPDOWN(CELL("address";C13))调用时函数正常工作 - 直接传入单元格引用
=MAXDROPDOWN(C13)会报错(C13为带下拉列表的单元格) - 传入字符串形式的单元格地址
=MAXDROPDOWN("C13")虽能运行,但丢失了单元格引用的智能特性(如自动更新地址、拖动填充适配等) - 尝试使用
getA1notation()方法,发现它只能获取函数所在的当前活动单元格地址,无法处理作为参数传入的目标单元格
原函数代码
function MAXDROPDOWN(cell1){ try { var cell = SpreadsheetApp.getActive().getRange(cell1); var rule = cell.getDataValidation(); if (rule != null) { var args = rule.getCriteriaValues(); return Math.max(...args[0]) } } catch( err ) { return "#ERROR!" } }
修正后的可用代码
感谢TheWizEd的帮助,修改后的函数支持直接传入单元格引用(如=MAXDROPDOWN(C13))调用:
function MAXDROPDOWN(cell){ try { var cell1 = SpreadsheetApp.getActive().getRange(CELL_ADDRESS(cell)); var rule = cell1.getDataValidation(); if (rule != null) { var args = rule.getCriteriaValues(); return Math.max(...args[0]) } } catch( err ) { return "#ERROR!" } } function CELL_ADDRESS(cell) { let test = SpreadsheetApp.getActiveSheet().getActiveCell().getFormula(); let address = test.match(/\(.+\)/)[0]; return(address.slice(1,-1)); }
内容的提问来源于stack exchange,提问作者USER1234567890
相关产品推荐
相关产品推荐

