【问题标题】:Google Sheets QUERY function - how to reference the active sheet/tab name?Google 表格查询功能 - 如何引用活动表格/标签名称?
【发布时间】:2026-01-05 08:40:01
【问题描述】:

似乎很简单,但我无法让它工作。我搜索了很多文章并接近,但没有雪茄。我编写了代码来为我们所有的经理创建一个标签,效果很好。现在我想使用 QUERY 函数从包含所有经理数据的第一个选项卡中分解每个经理的数据。但是,我不想在每个选项卡上的每个 QUERY 函数中键入每个经理的姓名,而是引用我为每个经理创建的工作表/选项卡名称。

这行得通:

=QUERY(StaffDetail!A1:E338,"SELECT B,C,E,A WHERE A = 'Doe, Jane'",1)

我尝试将代码放入脚本编辑器以创建一个调用工作表名称的函数,然后将其放入 QUERY 公式中;但它不起作用。

function sheetName() {
  return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
}

不起作用:

=QUERY(StaffDetail!A1:E338,"SELECT B,C,E,A WHERE A = sheetName()",1)

我收到以下错误:

我不明白为什么它不起作用。我读到了 INDIRECT 和其他一些内容,但这是在同一张纸上,所以我认为我不需要它?任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-formula


    【解决方案1】:

    说明/问题:

    • 您的自定义函数返回Sheet,但您的查询公式接受'Sheet'

    • 我尝试了多种方法,但似乎只有 CONCAT 有效(连接也可以)。

    解决方案:

    两个修改:

    将您的自定义公式更改为:

    function sheetName() {
      return `'${SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName()}'`;
    }
    

    假设Sheet1 是活动工作表,这将返回'Sheet1'

    将您的谷歌表格公式更改为:

    =QUERY(StaffDetail!A1:E338, CONCAT("SELECT B,C,E,A WHERE A =", sheetName()),1)
    


    参考资料:

    我使用template literals 使函数返回'Sheet'

    【讨论】:

    • 完美!谢谢马里奥斯。为了确保我理解 - 因为使用函数的公式将其视为字符串,您需要让 GAS 中的函数也将其视为字符串?通过将 tic 标记放在函数中,它变成了一个字符串。我认为这很棒,你为我节省了很多时间。再次感谢您!
    • @Karen 很高兴它解决了您的问题。自定义函数返回一个字符串,但方式不正确。它必须是 'sheet' 而不是 sheet 但两者都是字符串。
    • 感谢马里奥斯的澄清!
    最近更新 更多