首页 > 解决方案 > 如何通过用优雅的脚本替换数以千计的单元格公式计算来减少谷歌表格的滞后?

问题描述

第一次发帖,请多多包涵。

我已经成功设计了一个谷歌工作表,它可以根据另一个选项卡中的作物计划自动创建一个作物地图(“成功”)

在“继承”中,以下列相关: A 列 - 继承 ID C 列 - 行 ID R 列 - 种植日期 W 列 - 收获日期

在“地图 1A”中,我创建了我们字段的地图,B 列代表行 ID,右侧的列分别代表一年中的一周,其开始日期在第 2 行中定义。

我的目标是将每个序列映射到适当的行上,以了解它将在地下的持续时间(种植日期到收获日期)。在不同的日期范围内,我将有不同的继承占据同一行。

我分三步完成了这个:

第 1 步 每个单元格(最左边的列除外)都包含一个公式,该公式返回和文本连接(如果有多个结果)该行中的任何连续在该周内 - 如果仅当它返回的值与单元格的值不同时left 会返回。结果是继任 ID 仅显示在它开始的那一周。这些单元格中的公式是:

=Iferror(If((Textjoin(" / ",True,FILTER(Successions!$A$2:$A$647,RegExMatch(Successions!$C$2:$C$647,$B3),Successions!$R$2:$R$647<D$2,Successions!$W$2:$W$647>D$2)))=(Textjoin(" / ",True,Iferror(FILTER(Successions!$A$2:$A$647,RegExMatch(Successions!$C$2:$C$647,$B3),Successions!$R$2:$R$647<C$2,Successions!$W$2:$W$647>C$2),""))),"",(Textjoin(" / ",True,FILTER(Successions!$A$2:$A$647,RegExMatch(Successions!$C$2:$C$647,$B3),Successions!$R$2:$R$647<D$2,Successions!$W$2:$W$647>D$2)))),"")

最左边一列的代码,我不想检查左边的单元格是:

=Iferror((Textjoin(" / ",True,FILTER(Successions!$A$2:$A$647,RegExMatch(Successions!$C$2:$C$647,$B3),Successions!$R$2:$R$647<C$2,Successions!$W$2:$W$647>C$2))),"")

第 2 步 因为每个单元格都包含一个公式,所以我无法让继承 ID 溢出到相邻的单元格中,因此无法读取。为了解决这个问题,我有一个名为“Map Final”的相邻选项卡,它通过数组公式反映“Map 1A”。因为它不只继承公式值,所以它允许文本溢出。

步骤 3 条件格式通过自定义公式功能应用于“最终地图”。每种作物类型都有一个规则。每个连续都自动为其作物类型的颜色着色,并且颜色在连续期间填充所有单元格。

我的问题是: 我怎样才能以更有效的方式完成相同的映射?目前,对 Successions 的任何更新都需要 30 秒到一分钟才能更新。进度条让我心烦意乱,基本上使这个非常酷的工具无法用于作物规划目的,在此期间,我们经常从数据到地图来回切换以做出放置决策。

  1. 您认为使用推送数据而不是拉取数据的自定义脚本可以做到这一点吗?
  2. 它会渲染得更快,还是我这样做的方式是最有效的方式?

虽然这是我的主要问题,但我当然愿意接受您通过简单地改进我当前的方法来提高速度的任何建议。

提前感谢您提供的任何帮助!

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-formula

解决方案


推荐阅读