一个通用型性能优化技巧,加快数据传输速度。
适用场景
有时候在 Google 表格使用 IMPORTRANGE 或 VLOOKUP 等函数,遇到大范围的数据,运行起来速度就会特别慢。
优化思路
将数据 “压缩”,等传输或者运算后,再将数据 “解压缩”。
实例
例如从 B1 到 V18 范围,如果要将这个范围的数据,使用 IMPORTRANGE 导入到其它电子表格,那么就需要导入 378 个单元格。
使用 JOIN 函数对数据进行横向拼接。
=JOIN("@", B1:V1)
注意,定界符必须是独一无二的,不能出现在拼接的数据中,否则下面的步骤会出现异常。JOIN 函数不支持数组,如果需要使用数组合并,需要将字符挨个拼接到一起。
=ARRAYFORMULA(B:B&"@"&C:C&"@"&D:D&"@"&E:E&"@"&F:F&"@"&G:G&"@"&H:H&"@"&I:I&"@"&J:J&"@"&K:K&"@"&L:L&"@"&M:M&"@"&N:N&"@"&O:O&"@"&P:P&"@"&Q:Q&"@"&R:R&"@"&S:S&"@"&T:T&"@"&U:U&"@"&V:V)
拼接在一起后,A 列的数据就已经包含了右边一大堆的单元格的数据了。
现在将这一部分数据使用 IMPORTRANGE 函数导入到其它的电子表格,只需要获取 A1 到 A18 的范围,也就是 18个单元格,这样相比 378 个单元格的数据要少很多很多。
使用 SPLIT 函数将数据拆分开。
=SPLIT(A1, "@", TRUE, FALSE)
移除空白参数要设置 FALSE,否则遇到空白的内容会跳过,这样会造成位置偏移。SPLIT 函数支持使用数组输出。拆分后的数据和源数据的显示效果是一样的。
思路总结
这个思路有点类似文件压缩和解压缩,将大量的数据合并到一起,减少传输的数据量,获取到数据后再进行拆分。这个方法同样也适用于 VLOOKUP, FILTER, QUERY 等函数。