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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:50:09