我对一般的脚本写作非常陌生,特别是在GAS中,并且想确保我学习好习惯。我编写了一个for循环脚本,实质上是执行以下操作:
例如
Cell A1包含" Something"。单元格B1包含"令人兴奋的"
单元格A2包含"新"。单元格B2包含" X"
Cell A3包含" New"。单元格B3包含" Y"
由于A3具有与单元格A2相同的值(该值为"新"),因此单元格B3(当前值为#34; Y")被清除,因此单元格中没有值B3。
似乎需要很长时间才能运行,我确信这是由于我的新手写作,我希望尽可能高效地使用此脚本。
你们中的任何人都有任何建议让这个脚本更有效率吗?
我也很感激任何解释,为什么任何建议对我自己的理解会更有效率,以便以后碰巧找到这个帖子的任何人也可以理解它。
这是脚本:
function testCode() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Test 1");
var source = sheet.getRange("A2:A");
for (i = 2; i < source.getLastRow(); i++) {
var currentCell = sheet.getRange(i,1).getValue();
var cellAbove = sheet.getRange(i-1,1).getValue();
var cellRight = sheet.getRange(i,2);
if (currentCell == cellAbove){
cellRight.clearContent(),({contentsOnly:true});
}
}
}
谢谢你
答案 0 :(得分:0)
最大的问题是你在每个循环中获得三个新范围。有一种方法可以在循环中获得新范围。您需要在A列和B列中获取数据。
function testCode() {
var cellAbove,currentCell,cellRight,data,lastRow,L,sheet,source,ss;
ss = SpreadsheetApp.getActiveSpreadsheet();
sheet = ss.getSheetByName("Test 1");
lastRow = sheet.getLastRow();
source = sheet.getRange(2,1,lastRow-1,2);//Get data starting in row 2 and column 1
//Get the number of rows that are the lastRow minus the number of rows not included
//at the top - get 2 columns
data = source.getValues();//Get a 2D array of values
L = data.length;//Get the number of elements in the outer array- which is the number of
//rows in the array
for (var i = 0; i < L; i++) {
if (i == 0) {continue;} //If this is the first loop there is no value above it to check
currentCell = data[i][0];
cellAbove = data[i-1][0];
if (currentCell == cellAbove){
cellRight = sheet.getRange(i+1,2);
cellRight.clearContent(),({contentsOnly:true});
}
}
}