我已经在这个平台上问过一些与我的个人项目有关的问题,这应该是最后一个,因为我已经接近完成了。以下是我创建的模拟示例电子表格的链接,该电子表格模仿了我实际项目的工作,但包含的敏感信息较少,并且尺寸也较小。
电子表格的基本概要:
从另一方控制/编辑的主计划中提取数据到主计划选项卡中。
在与导入数据相邻的列中,如果某些时隙指定了多个房间,则数组公式将按教室扩展主计划。其他公式会调整日期,开始时间和结束时间,以在当天的24小时内设置上限。每个课程的开始时间也要早一小时。
在Room Schedule选项卡中,基于第一列的房间号创建一个小时日历,并且仅对应于当前日期。
我已经在多种情况下对电子表格进行了广泛的测试,我对除计算时间以外的所有工作方式都很满意。我认为我使用的两个volatile函数本身会花费一些处理时间,并且我当然没想到这会闪电般快速,尤其是在不使用脚本的情况下,但是我实际实现此方法的项目要大得多并且需要很长时间才能更新。该电子表格的目的是允许用户找到一个开放的房间并通过单击旁边的复选框来“保留”它(因此整个行将变成红色),从而使其他所有人都知道现在已经在使用它。
我想知道是否有任何方法可以优化/加速我的电子表格,或者在每次单击复选框时不更新它,而是“手动”更新它,类似于OP询问的here。我不熟悉Apps Script,也不太精通整体代码编写,但是我愿意学习-我只是需要朝着正确的方向前进,因为我将陷入盲目。我知道Room Schedule选项卡中的公式数量可能对我不利,但我与最终产品的期望值非常接近,因此对您的任何帮助或见解都将不胜感激!
如果我对这个解释不够好,请随时提出任何问题。
为了加快速度,您应该避免每行使用相同的公式,而要使用arrayformulas。例如:
=IF(AND(TEXT(K3,"m/d")<>$A$1,(M3-L3)<0),K3+1,K3+0)
=ARRAYFORMULA(IF(K3:K<>"",
IF((TEXT(K3:K, "m/d")<>$A$1)*((M3:M-L3:L)<0), K3:K+1, K3:K+0), ))
=IF(AND(TEXT(K3,"m/d")=$A$1,(M3-L3)<0),TIMEVALUE("11:59:59 PM"),M3+0)
=ARRAYFORMULA(IF(K3:K<>"",
IF((TEXT(K3,"m/d")=$A$1)*((M3-L3)<0), TIMEVALUE("11:59:59 PM"), M3:M+0), ))