【发布时间】:2020-09-09 22:05:41
【问题描述】:
我目前正在学习谷歌应用脚本,遇到了一个小问题。
背景:我正在从 API 获取数据并将其写入电子表格,这在大多数情况下都可以正常工作,然后对数据进行一些处理。
在某些情况下,由于某种原因,导入无法正常工作。 (单元格值:#ERROR!) 对于这种情况,我制作了一个“复制”功能来将 API 数据复制到另一张表,从而跳过错误。因此,如果 1 个导入失败,我可以使用最后一个成功的导入。
问题: 对于一张纸来说,运行时间太高了,所以我从这段代码中改变了:
function copy() {
var copyWert = "";
for (var i = 3; i < 247; i++) {
for (var j = 1; j < 4;j++) {
copyWert = SpreadsheetApp.getActive().getSheetByName('API').getRange(i, j).getValue();
if (copyWert == "#ERROR!" || copyWert == "" || copyWert == "#NAME!") {
} else {
SpreadsheetApp.getActive().getSheetByName('Copy').getRange(i, j).setValue(copyWert);
}
}
}
}
收件人:
function copy() {
var values = SpreadsheetApp.getActiveSheet().getRange("A2:D300").getValues();
SpreadsheetApp.getActive().getSheetByName('Copy').getRange("A2:D300").setValues(values);
}
哪种方式更快,但缺少检查。有什么想法吗?
【问题讨论】:
-
试试这个:
function copy1() { const ss=SpreadsheetApp.getActive(); const sh=ss.getSheetByName('API'); const rg=sh.getRange(3,1,245,4); var vA=rg.getValues(); for(var i=0;i<vA.length;i++) { for(var j=0;j<vA[i].length;j++) { if(vA[i][j]=="#ERROR" || vA[i][j]=="" || vA[i][j]=="#NAME") { }else{ sh.getRange(i+3,j+1).setValue(vA[i][j]) } } } }