Apps Script中getNamedRanges()返回[NamedRange]而非名称的问题
问题解答
1. [NamedRange, NamedRange,...]是预期行为吗?
是的,这完全是正常的预期结果。getNamedRanges()方法返回的是NamedRange对象数组,而非直接的区域名称字符串。当你用Logger.log()打印对象时,系统只会显示对象的类型标识NamedRange,不会自动展开其属性。
2. 如何获取命名区域的名称?
要获取每个命名区域的名称,需要调用NamedRange对象的getName()方法。示例代码如下:
const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); const sheetNamedRanges = targetSheet.getNamedRanges(); // 遍历并打印所有命名区域的名称 sheetNamedRanges.forEach(namedRange => { Logger.log(namedRange.getName()); });
3. 修正获取活动单元格所在命名区域的脚本
你提到的目标脚本无法运行,大概率是因为没有正确操作NamedRange对象。以下是可正常运行的修正版本:
function getActiveCellNamedRange() { const activeCell = SpreadsheetApp.getActiveCell(); const currentSheet = activeCell.getSheet(); const allNamedRanges = currentSheet.getNamedRanges(); // 遍历所有命名区域,检查活动单元格是否在范围内 for (const nr of allNamedRanges) { const range = nr.getRange(); const isInRange = activeCell.getRow() >= range.getRow() && activeCell.getRow() <= range.getLastRow() && activeCell.getColumn() >= range.getColumn() && activeCell.getColumn() <= range.getLastColumn(); if (isInRange) { const rangeName = nr.getName(); Logger.log(`活动单元格所在命名区域:${rangeName}`); return rangeName; } } Logger.log("活动单元格不属于任何命名区域"); return null; }
这个脚本会遍历当前工作表的所有命名区域,通过对比行号和列号判断活动单元格是否在区域内,找到后返回对应的区域名称。
内容的提问来源于stack exchange,提问作者Indie
相关产品推荐
相关产品推荐

