Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用动态定义的工作表进行Google电子表格查询_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 使用动态定义的工作表进行Google电子表格查询

Google apps script 使用动态定义的工作表进行Google电子表格查询,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我在为一些不寻常的事情挣扎 我正在做一个谷歌电子表格,有很多表格,它们的名字是MM/YYYY,我需要获取A1:B100范围内的所有数据,然后用这些数据在主数据表上进行查询,问题是,我用javascript做了一个函数来获取这些表格的范围,但我不能在=QUERY()上使用它们功能,尝试了很多,用不同的方法从互联网上,但没有成功 我的电子表格示例: 还有我为动态管理工作表数据所做的应用程序脚本: let sheetsData = () => SpreadsheetApp.getActiveS

我在为一些不寻常的事情挣扎

我正在做一个谷歌电子表格,有很多表格,它们的名字是MM/YYYY,我需要获取A1:B100范围内的所有数据,然后用这些数据在主数据表上进行查询,问题是,我用javascript做了一个函数来获取这些表格的范围,但我不能在=QUERY()上使用它们功能,尝试了很多,用不同的方法从互联网上,但没有成功

我的电子表格示例:

还有我为动态管理工作表数据所做的应用程序脚本:

let sheetsData = () => SpreadsheetApp.getActiveSpreadsheet().getSheets().filter(sheet => sheet.getName().match(/^[\d]/)).map(sheet => sheet.getRange("A1:B20"));
Logger.log( sheetsData() );
我在电子表格上的示例用法是=QUERY(sheetsData();“SELECT*”),我甚至不能列出数据。。。卢尔


欢迎提供任何帮助,tnx。

您不需要返回
范围
对象,而需要返回范围内包含的值。您还必须确保返回的数据是二维数组

函数GET_DATA(){ const dataSheets=SpreadsheetApp.getActiveSpreadsheet() .getSheets() .filter(s=>s.getName().match(/^[\d]/); 常数范围=数据表 .map(s=>s.getRange(“A1:B20”); 返回范围 .reduce((result,range)=>result.concat(range.getValues()),[]); } 上面的实现使用一个公式,例如
=QUERY(GET_DATA(),“SELECT*”


然而,这种方法存在一个根本问题。由于范围位置是在应用程序脚本端硬编码的,并且未指定为公式的一部分,因此当工作表中的数据更改时不会触发重新计算。

您需要返回范围内包含的值,而不是返回范围对象。您还必须确保返回的数据是二维数组

函数GET_DATA(){ const dataSheets=SpreadsheetApp.getActiveSpreadsheet() .getSheets() .filter(s=>s.getName().match(/^[\d]/); 常数范围=数据表 .map(s=>s.getRange(“A1:B20”); 返回范围 .reduce((result,range)=>result.concat(range.getValues()),[]); } 上面的实现使用一个公式,例如
=QUERY(GET_DATA(),“SELECT*”


然而,这种方法存在一个根本问题。由于范围位置是在应用程序脚本端硬编码的,并且没有指定为公式的一部分,因此当工作表中的数据发生变化时不会触发重新计算。

很好,但您是否有其他方法?这将从表的重新计算中受益?很好,它起作用了,但是你有其他的方法吗?这将从表格重新计算中受益吗?