javascript - 谷歌的脚本总是那么慢吗?
问题描述
我为 Google 表格写了一个小脚本。每当我在表中添加新内容时,都会添加新值。如果我快速执行此操作(输入一个值并直接按 Enter 键以便进入下一行),则脚本不会跟上并遗漏值(行)。有没有人遇到过这个问题并且知道如何解决它?
我不关心它实际上是如何工作的,只关心如何让这些行在 Google 表格中运行得更快。
function addDateTimetoCell(e){
var pDate = new Date();
var pSheet = SpreadsheetApp.getActiveSheet();
var pRange = e.range;
switch(pRange.getColumn()){
case 1:{
if(pSheet.getRange(pRange.getRow(), 4).getValue().length <= 0){
pSheet.getRange(pRange.getRow(), 4).setValue(pDate);
if(pSheet.getRange(pRange.getRow(), 8).getValue() <= 0){
pSheet.getRange(pRange.getRow(), 8).setValue(pSheet.getRange(pRange.getRow(), pRange.getColumn()).getValue());
}
}
break;
}
case 2:{
if(pSheet.getRange(pRange.getRow(), 5).getValue().length <= 0){
pSheet.getRange(pRange.getRow(), 5).setValue(pDate);
if(pSheet.getRange(pRange.getRow(), 9).getValue() <= 0){
pSheet.getRange(pRange.getRow(), 9).setValue(pSheet.getRange(pRange.getRow(), pRange.getColumn()).getValue());
}
}
break;
}
case 3:{
if(pSheet.getRange(pRange.getRow(), 6).getValue().length <= 0){
pSheet.getRange(pRange.getRow(), 6).setValue(pDate);
if(pSheet.getRange(pRange.getRow(), 10).getValue() <= 0){
pSheet.getRange(pRange.getRow(), 10).setValue(pSheet.getRange(pRange.getRow(), pRange.getColumn()).getValue());
}
}
break;
}
}
}
解决方案
Google Apps 脚本非常快,但对SpreadsheetApp
API 的调用非常慢。您应该通过将调用分配给一个变量来最小化对 API 的调用次数,尤其是在它们被多次调用的情况下。
我也认为代码没有优化。重复调用,不必要的 switch case 使用(因为有一个带有case
vs的模式column
)。
我将这些重复的调用分配给一个变量并使用它们。此外,我确实简化了开关盒以使其更简单。测试代码是否像以前一样工作并且更快。
代码:
function addDateTimetoCell(e){
var pDate = new Date();
var pSheet = SpreadsheetApp.getActiveSheet();
var pRange = e.range;
var row = pRange.getRow();
var column = pRange.getColumn();
var rangeCol1 = pSheet.getRange(row, column + 3);
if(rangeCol1.getValue().length <= 0){
rangeCol1.setValue(pDate);
var rangeCol2 = pSheet.getRange(row, column + 4);
if(rangeCol2.getValue() <= 0){
rangeCol2.setValue(rangeRC.getValue());
}
}
}
推荐阅读
- jpa - DDD、JPA 和非默认构造函数
- javascript - 如何防止使用jquery在音频元素中单击播放按钮上的多个ajax调用?
- laravel - Laravel 从深度关系中获取数据
- javascript - 如何通过自定义顺序解析带有数组的 json?
- excel - Excel VBA 或非 VBA:如何在列名和行混乱的两张工作表之间执行匹配?
- python - 如何找到列表中可以除以n的第一项?
- ffmpeg - ffmpeg 输出文件小于输入文件
- android - I/Ads:广告加载失败:1
- git - 在“挤压和合并”之后,我的分支机构出现了分歧。我该如何解决?
- html - 如何在导航栏上实现模糊效果?