加快Google Web App电子表格加载速度

时间:2016-10-07 18:48:40

标签: google-apps-script google-sheets

我正在开发一个读取电子表格的GAS Web App(它与电子表格无关,并且不能出于无关原因)。

我加载到工作表或其范围内,如下所示:

var ss = SpreadsheetApp.openById(ssId);
dataSheet = ss.getSheetByName('Projects');
var data = dataSheet.getRange('A1:BL').getValues();

我已经做了很多测试,并且使用我的人口较少的A1:BL5500电子表格(有相当数量的单元格填充了几十个字符的文本),加载时间大约需要6秒。我已经尝试了命名范围和很多东西,但不能比它更快。

我真正需要的是工作表的1列,然后我搜索找到我需要的行,然后我需要那一行。但是加载1列所需的时间与加载整个列的时间几乎相同。有一个更好的方法吗?延迟是有问题的。

以下是时间分析:

SpreadsheetApp.openById(ssid) [0.174 seconds]
Spreadsheet.getSheetByName([Projects]) [0 seconds]
Sheet.getRange([A1:BL]) [0.387 seconds]
Range.getValues() [6.483 seconds]

为了比较,这里只加载一列:

SpreadsheetApp.openById(ssid) [0.164 seconds]
Spreadsheet.getSheetByName([Projects]) [0 seconds]
Sheet.getRange([A1:A]) [0.336 seconds]
Range.getValues() [5.887 seconds]

这些只是单次运行,时间差异不显着(它们各不相同)。

1 个答案:

答案 0 :(得分:0)

正如我上面提到的,我找到了一个可能对其他人有帮助的答案。 我创建了第二个工作表(“ProjectIndex”),并设置了两个列,仅指向“项目”中感兴趣的相应列(我原先说我只是搜索一列,以便更简单:我是实际上搜索两个)。 我加载该数据,找到感兴趣的行,然后返回“项目”并仅加载我想要的行。

SpreadsheetApp.openById(ssid) [0.153 seconds]
Spreadsheet.getSheetByName([ProjectIndex]) [0 seconds]
Sheet.getRange([A1:B]) [0.282 seconds]
Range.getValues() [0.504 seconds]

加载ProjectIndex的时间:

Spreadsheet.getSheetByName([Projects]) [0 seconds]
Sheet.getRange([A4785:BL4785]) [0.513 seconds]
Range.getValues() [0.352 seconds]

加载一行项目的时间:

select ratedesc,
       max(case when seqnum = 1 then amt end) as Amount1,
       max(case when seqnum = 2 then amt end) as Amount2
from (select ft.*,
             row_number() over (partition by ratedesc order by id) as seqnum
      from #finalrates fr
     ) fr
group by ratedesc;

我特意说明了文件底部附近有一行。可能是我可以提前异步加载ProjectIndex,我不知道这是否会进一步加快速度,我不知道该怎么做。除了不确定数据是否是最新的之外,后续搜索原则上可以很快。