Google Sheets用SheetName()数组动态提取多工作表指定单元格咨询
Google Sheets动态引用工作表名解决方案
你的问题不是操作数组导致的,是Google Sheets默认不支持直接将存储在单元格中的值识别为工作表名的引用,你之前的写法是把B10当成了工作表名本身,而不是读取B10单元格的内容作为工作表名,所以会报错。
方案1:无需新增代码,使用内置INDIRECT函数实现动态引用
正确写法如下:
=INDIRECT("'"&B10&"'!$E$35")
- 拼接逻辑说明:用
&符号拼接字符串,首尾加单引号是兼容带空格、特殊字符的工作表名,避免识别出错,INDIRECT函数会将拼接完成的地址字符串转换为实际可读取的单元格引用。
如果需要引用单元格区域,比如获取对应工作表A1到C10的全部内容,调整写法即可:
=INDIRECT("'"&B10&"'!A1:C10")
当前版本Google Sheets支持动态数组溢出,输入公式后会自动填充对应区域的所有内容,无需手动拖动公式扩展。
方案2:修改现有自定义函数,实现批量自动读取
如果需要一次性获取所有工作表的指定单元格/区域数据,可以直接扩展你已经在使用的自定义函数,不需要额外调用复杂的get类命令,示例代码如下:
// 传入要提取的单元格地址(默认E35),返回工作表名+对应单元格值的数组 function getSheetSpecifiedValue(cellAddr = "E35") { const result = []; const allSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); for (let i = 0; i < allSheets.length; i++) { const currentSheet = allSheets[i]; // 同时返回工作表名和对应单元格值,需要其他内容可以自行调整 result.push([currentSheet.getName(), currentSheet.getRange(cellAddr).getValue()]); } return result; }
调用时直接在空白单元格输入=getSheetSpecifiedValue("E35")即可,新增工作表后数据会自动同步更新,不需要手动调整每个单元格的引用公式。
内容的提问来源于stack exchange,提问作者Stacy C
相关产品推荐
相关产品推荐

