Google Spreadsheets中的工作表之间的一对多报告

时间:2013-07-12 14:30:47

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

我试图将一对一的“一对多关系”(如在数据库中)复制到另一张(在同一电子表格中)。

我已经完成了类似主题的研究,但似乎没有任何解决方案可以覆盖我。

从本质上讲,原则上可以说明如下:

  • 假设我们有一张表(PrimaryTable)存储了Elements 具有pkElementID列(主键)和
  • 的唯一(无重复)
  • 第二张(SecondaryTable),其中每个元素的属性是 存储,根据他们对应的ElementID(也有 充当外键的fkElementID列。)

关于此的一些补充说明:

  • PrimaryTable包含超过2000行,其中 SecondaryTable的范围大致相同。
  • 事实上,SecondaryTable中的上述“属性” 分散在几个列中,这些列也连接在一列中 数组公式。
  • 来自辅助表的“报告”数据不是数字,而是 需要的大字符串(约1000个字符或更多)的HTML文本 接合。
  • 公式应该是一个数组公式,以便填充它 自动将更多行添加到工作表中,最好是在 第一行的标题单元格,因此可以锁定。

所有这一切的一个例子是在辅助表的每一行的HTML代码(标签)内每个元素的几个图像的URL,报告给PrimaryTable中的相应单元格。

到目前为止,我在对Ted Juch的博客进行了一些讨论之后找到了一个解决方案,并为此目的贡献了一个公共电子表格,其中使用了以下公式:

  

ARRAYFORMULA(移调(SPLIT(CONCATENATE(REPT(移调('次要   表'!B1:B&“,”);(A1:A = TRANSPOSE('Secondary   表'A1:A))*(LEN(A1:A)0))及REPT(CHAR(9)及”   “& CHAR(9); TRANSPOSE(行('二级表'!A1:A))=行('中学'   表'!A1:A)));“,”& CHAR(9); 0)))

我想从TC Adam那里得到了上面的公式,虽然我似乎已经了解它是如何工作的,但我几乎无法维护它或将其修改为不同的情况。在最后一个例子中,它返回一个“超出范围”的错误,无法解释原因。

我对公式的唯一修改是在初始数组公式中添加“if(row(A1:A)= 1;”列标题“; FORMULA)”,结果为:

  

ArrayFormula(IF(ROW(A1:A)= 1;“列标题”;   TRANSPOSE(SPLIT(CONCATENATE)(REPT(TRANSPOSE)('Secondary Table'!B1:B&“,   “);(A1:A = TRANSPOSE('次要   表'A1:A))*(LEN(A1:A)0))及REPT(CHAR(9)及”   “& CHAR(9); TRANSPOSE(行('二级表'!A1:A))=行('中学'   表'!A1:A)));“,”& CHAR(9); 0))))

我怀疑大型数据集是否会产生如此庞大的数组,在谷歌电子表格的限制下无法正确处理,因此问题的原因,或者是我搞砸了试图调整它的公式。 / p>

我还尝试使用ArrayLib库创建一个自定义函数,该库具有一个名为ArrayLib.filterByText的类似函数,但它只运行几行,直到它出现“error:Service timed out”消息。

我应该尝试实现查询方法吗? 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

一年前你问过这个问题,但我仍然认为这对其他人有用(这对我而言)。

Here is the "best" solution I found for this(信用转到Alexander Ivanov

请注意一对多关系不是以标准化的方式保存,而是以序列化方式保存,但它确实可以开箱即用,并且可能是更多的灵感完整彻底的解决方案。