Google Sheets如何编写自定义函数获取指定单元格的背景色
问题核心原因
你编写的代码报错,是因为当你在单元格直接输入
=getColor(A1)时,传入函数的参数是A1单元格的内容值,而非A1的地址字符串,getRange()无法识别非地址格式的输入参数。
可用实现方案
方案1:传入单元格地址字符串(最稳定)
直接传入带引号的单元格地址即可调用,比如需要获取A1单元格背景色,输入=getColor("A1")
/** * 返回指定单元格的十六进制背景色值 * @param {string} cellAddress 单元格地址,需用英文引号包裹,例如"A1" * @customfunction */ function getColor(cellAddress) { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const targetRange = sheet.getRange(cellAddress); return targetRange.getBackground(); }
方案2:支持直接传单元格引用(无需加引号)
如果不想每次输入地址加引号,可以用以下实现,直接输入=getColor(A1)即可调用:
/** * 返回指定单元格的十六进制背景色值 * @param {any} cell 目标单元格,直接传入单元格引用即可,例如A1 * @customfunction */ function getColor(cell) { // 获取当前调用函数的单元格公式,解析出引用的单元格地址 const formula = SpreadsheetApp.getActiveRange().getFormula(); const cellAddress = formula.match(/\=getColor\((.*)\)/i)[1]; const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const targetRange = sheet.getRange(cellAddress); return targetRange.getBackground(); }
注意事项
- 背景色修改后自定义函数不会自动刷新,可在函数中增加一个无意义的触发参数,例如
=getColor("A1", B1),只要修改B1的值,函数就会重新计算返回最新的背景色 - 如果需要跨工作表获取颜色,可以修改代码传入表名参数,例如
getRange("Sheet2!A1")即可读取Sheet2的A1单元格背景色
内容的提问来源于stack exchange,提问作者Catalin Tarus
相关产品推荐
相关产品推荐

