当前位置: 首页 > 知识库问答 >
问题:

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

墨承泽
2023-03-14

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

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

我的电子表格示例:

https://docs.google.com/spreadsheets/d/1W5W7y16yvOUoqNZCZ59ol8D2nbelJHNqtgaxrtb1jC8/edit?usp=sharing

此外,我所做的应用程序脚本来动态管理工作表数据:

let sheetsData = () => SpreadsheetApp.getActiveSpreadsheet().getSheets().filter(sheet => sheet.getName().match(/^[\d]/)).map(sheet => sheet.getRange("A1:B20"));
Logger.log( sheetsData() );

我在电子表格上的示例用法是=QUERY(sheetsData();“SELECT*”),我甚至不能列出数据。。。卢尔

欢迎任何帮助,tnx。

共有1个答案

荣俊
2023-03-14

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

js prettyprint-override">function GET_DATA() {
  const dataSheets = SpreadsheetApp.getActiveSpreadsheet()
      .getSheets()
      .filter(s => s.getName().match(/^[\d]/));

  const ranges = dataSheets
      .map(s => s.getRange("A1:B20"));

  return ranges
      .reduce((result, range) => result.concat(range.getValues()), []);
}

上面的实现使用一个公式,如=QUERY(GET_DATA(),"SELECT*")

然而,这种方法有一个基本问题。由于范围位置是在Apps Script端硬编码的,并且没有作为公式的一部分指定,因此不会在工作表中的数据更改时触发重新计算。

 类似资料:
  • 我有一个谷歌电子表格,其中有3张表格,包含来自不同国家的数据(,,),还有第4张表格()。所有图纸中的列都相同。 我已经知道我可以这样组合它们: 然而,我需要一种方法将任意数量的纸张组合在一起,而不需要修改公式。所以,如果添加了Country4,也应该追加。我怎么能那样做? 如果有帮助,我有一个工作表,其中有一列包含所有国家的名称(因此也包括国家工作表名称)。我有一个脚本,如果在工作表中添加了一个

  • 我是一名编码等方面的初学者,但我正在努力理解我在做什么以及代码中发生了什么。 我想在不同的电子表格之间划一行。 我在“核心”电子表格中有一个脚本,它在“主页”和“完成”表格链接之间移动一行到电子表格: 我搜索了如何将位于“已完成”工作表上的数据移动到另一个名为“数据库”的电子表格链接到电子表格: 但我想将数据从表“CORE”/“Finished”传输到表“database”/“DB”,而不重写DB

  • 我已经通过谷歌官方文档《开发者指南》API中提到的一个简单Java代码成功地在我的Google Drive帐户的现有电子表格中创建了一个新的工作表,但我想通过Java代码在我的Google Drive帐户中创建一个新的电子表格。在链接中,他们没有提到这方面的任何示例代码。我已经在Spreadservice类中看到了不同的可用方法。 如何使用Google电子表格API实现这一点?

  • 我使用Google SpreadSheet附加组件制作Google Analytics(分析)报表。我的问题是,对于每个查询,这个附加组件都会创建不同的工作表。我经常有大约50张不同的表格,其中的数据必须编译成一张表格。例如: 我可能有三张表格,分别是:“有机数据”、“直接数据”和“其他数据” 每个工作表都有一组不同的数据,我想在第四个工作表“Report”中将它们编译成一个表。该表的第一列数据来

  • 我正在制作一个骰子滚动工具,用户可以调整骰子的边数和骰子滚动的次数。 为此,我让用户在单元格B2中指示骰子的边数,以及在B3中掷骰子的骰子数。 那我用 在E列中创建一系列与掷出的骰子数相等的数字。在我用的这个栏目旁边 以获得随机数的选择。 这很管用。但是,我想知道是否有人能告诉我如何使用Array公式完成同样的任务。 当我尝试将ARRAYFORMULA应用于公式时,我只得到一列相同的数字。 我的任

  • 还有谁对setWidth函数有问题吗?这里的示例是“300”,但如果更改数字,侧边栏的宽度相同。我在一个干净的电子表格上试过几次。 https://developers.google.com/apps-script/guides/dialogs#custom_sidebars