Google sheets 如何计算Google查询';s数据字段?
如何计算查询的数据属性以使数据范围动态 更多详细信息:我有一个包含多个工作表的电子表格,包括一个单独的“摘要”表。这里,有几个查询正在聚合来自这些多个工作表的数据。都很好。但是:无论何时添加/删除工作表,我都必须手动更新所有查询,这相当麻烦。所以我创建了一个小脚本,返回所有工作表的名称。很好 我遇到的问题是:如何使QUERY()接受这些工作表名称?它返回Google sheets 如何计算Google查询';s数据字段?,google-sheets,google-sheets-formula,Google Sheets,Google Sheets Formula,如何计算查询的数据属性以使数据范围动态 更多详细信息:我有一个包含多个工作表的电子表格,包括一个单独的“摘要”表。这里,有几个查询正在聚合来自这些多个工作表的数据。都很好。但是:无论何时添加/删除工作表,我都必须手动更新所有查询,这相当麻烦。所以我创建了一个小脚本,返回所有工作表的名称。很好 我遇到的问题是:如何使QUERY()接受这些工作表名称?它返回#值 最初:=QUERY({'sheet 1'!$A:$C;'sheet 2'!$A:$C};“SELECT SUM(Col2),…”/)有效
#值
- 最初:
=QUERY({'sheet 1'!$A:$C;'sheet 2'!$A:$C};“SELECT SUM(Col2),…”/)有效。
- 使用脚本:
=QUERY(getSheetNames();“SELECT SUM(Col2),…”/#value error
- 将脚本添加到单元格和引用单元格:
=QUERY(A1;“选择总和(Col2),…”)/#值错误
- 自定义函数:
当前返回getSheetNames()
“{'sheet 1'!$A:$C;'sheet 2'!$A:$C}”
非常感谢你的帮助 能否提供与
getSheetNames()
相关的代码?最可能的问题是getSheetNames()
返回一个字符串,QUERY
需要一个单元格范围。考虑到您的情况,我建议将所有这些(包括查询)都设置为自定义函数,而不要在常规公式中调用自定义函数的结果。你为什么不能那样做?如果你认为这是一个有效的解决方案,但你不确定如何做到这一点,考虑提供完整的代码>查询< /代码>公式,我会考虑发布一个答案来解释这一点。不返回字符串是一个非常好的主意,可能会成功!应该返回哪种类型的文件?我将在上面发布getSheetNames()
。出于可维护性的考虑,我不希望将所有内容都封装在自定义函数中,因为有几个人正在处理此工作表。更容易将公式生成为文本字符串,然后使用脚本将该字符串转换为实际公式出于可维护性的考虑,我不希望将所有内容封装在自定义函数中
您可以拥有所有可能作为自定义函数参数更改的信息。要按照你想要的方式来做,你可能需要,但如果你不知道你的公式会返回多少张,我认为这是不可能的。实际上,我认为将所有内容都包含在自定义公式中会使维护更容易。@player0我认为您不能使用自定义函数设置公式(无法使用setValue
或setFormula
等方法)。您能提供与getSheetNames()
相关的代码吗?最可能的问题是getSheetNames()
返回一个字符串,QUERY
需要一个单元格范围。考虑到您的情况,我建议将所有这些(包括查询)都设置为自定义函数,而不要在常规公式中调用自定义函数的结果。你为什么不能那样做?如果你认为这是一个有效的解决方案,但你不确定如何做到这一点,考虑提供完整的代码>查询< /代码>公式,我会考虑发布一个答案来解释这一点。不返回字符串是一个非常好的主意,可能会成功!应该返回哪种类型的文件?我将在上面发布getSheetNames()
。出于可维护性的考虑,我不希望将所有内容都封装在自定义函数中,因为有几个人正在处理此工作表。更容易将公式生成为文本字符串,然后使用脚本将该字符串转换为实际公式出于可维护性的考虑,我不希望将所有内容封装在自定义函数中
您可以拥有所有可能作为自定义函数参数更改的信息。要按照你想要的方式来做,你可能需要,但如果你不知道你的公式会返回多少张,我认为这是不可能的。实际上,我认为将所有内容都放在自定义公式中会使维护更容易。@player0我认为您不能使用自定义函数设置公式(不能使用setValue
或setFormula
等方法)。
function getSheetNames() {
var out = "";
var columns = "!$A:$C";
var apostrophe = "'";
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i = 1 ; i < sheets.length; i++) {
out += apostrophe + sheets[i].getName() + apostrophe + columns + "; ";
}
out = "{" + out.slice(0, -2) + "}";
return out;
}