Google App脚本返回多行数组

时间:2018-12-02 05:17:47

标签: google-apps-script google-sheets google-cloud-platform cross-join

摘要

我是Google Apps脚本的新手,但我花了很多时间进行研究,但空洞了。基本上,我正在尝试复制SQL的交叉联接功能。我有2个表,一个12个月的日历表和一个3个客户的客户表。客户表是通过Google表单填充的,今后还会添加新客户。

对于我的报告,我需要每月提供客户数据。因此,我想将客户数据与日历交叉连接,以创建一个包含36行的数据集,其中每个客户都有12行,每月一个。

基于我在stackoverflow上找到的其他代码,我已经接近了。现在的问题是,我的两个数据集最终显示在后续行中,这似乎与我处理数组的方式有关。我也尝试过使用push.apply和.concat获得完全相同的结果。

任何帮助将不胜感激!可以找到工作簿here

此外,日历表不是严格必需的-我只是来自SQL背景,所以我的第一个直觉是制作日历表并创建交叉联接。如果您想出一种更好的方法来接受来自Google表单的一行客户数据并输出连续添加了月份和年份的X行,请告诉我!

免责声明::我知道在SQL数据库中可以更好地处理这种交叉联接方法,并且Google表格不是为此设计的。在设计更好的长期解决方案时,这是一个临时解决方法。此解决方法的客户数据集总数可能少于100个客户,并且正在以大约每周1个客户的速度增长。


日历表


客户表


自定义代码

scenic


电流输出


所需的输出

1 个答案:

答案 0 :(得分:1)

您可以使用concat之类的数组方法来获得相同的结果。

代码段:

function sqlCrossJoin(arr1, arr2) {
  arr1 = arr1 || [['jan', 1], ['feb', 2]];
  arr2 = arr2 || [
    ['Jane Doe', 1983, 'PortLand', 'Oregon'],
    ['John Smith', 1984, 'San Francisco', 'California'],
  ];
  var output = [];
  arr1.forEach(function(month) {
    arr2.forEach(function(customer) {
      output.push(month.concat(customer));
    });
  });
  return output;
/* Expected Output:
[ [ 'jan', 1, 'Jane Doe', 1983, 'PortLand', 'Oregon' ],
  [ 'jan', 1, 'John Smith', 1984, 'San Francisco', 'California' ],
  [ 'feb', 2, 'Jane Doe', 1983, 'PortLand', 'Oregon' ],
  [ 'feb', 2, 'John Smith', 1984, 'San Francisco', 'California' ] ]*/
}

参考文献: