所以我创建了一个程序,当if条件满足时,该程序应该标记多个列中的一个,因此我们可以对我们的营销部门进行分类。
如果查看最后一行代码,您将看到sheet(它封装了所有内容)getRange(它定义了下一个部分,getCell应该在其中的范围),然后您将看到getCell。
我在获取单元格变量中添加了+1,因为它不被视为数组,因此不会以零开头,这意味着它的总和为4将从第四行开始(而不是第五行)数组)。问题是我得到一个" Cell引用超出范围,谷歌脚本编辑器将突出显示上述行。
如果获取范围在工作表内,并且getCell在getRange中,我不知道如何发生这种情况。
function myFunction() {
var app = SpreadsheetApp;
var sheet = app.getActiveSpreadsheet().getActiveSheet();
var lr= sheet.getLastRow();
var dataRangeContact = sheet.getRange("B4:B"+lr);
var dataContact = dataRangeContact.getValues();
var dataRangeComp= sheet.getRange("M4:M"+lr);
var dataComp=dataRangeComp.getValues();
var IndigoColumn= sheet.getRange("L4:L"+lr);
var validIndigoColumn =12;
var validLabColumn=11;
var validDesColumn=10;
var validPocColumn=9;
var validArtColumn=8;
for(var i=3; i<=lr; i++) {
var lr=sheet.getLastRow();
var rowTwo=dataContact[i].toString();
var rowThirteen=dataComp[i].toString();
if (rowThirteen=="University Lab") {
if (rowTwo.match(/(process engineer|analytical chemist|scientist|sr.scientist|research scientist|test Engineer|Medical Devices professional|scientific)/i)) {
sheet.getRange(4,12,lr).getCell(i+1,validIndigoColumn).setValue("Y");
}
}
}}
答案 0 :(得分:0)
我认为这是相同的功能重写有点不同。它很可能会跑得更快。它只有一个范围,因此可能更容易避免范围错误。请记住,行和列从1开始,数组索引从0开始。 我有时会这样做,以保持他们的直接。
无论如何,这是我缩短版的功能。
function myFunction(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getDataRange();
var vA=rg.getValues();
for(var i=3;i<vA.length;i++){
if(vA[i][12]=='University Lab' && vA[i][1].toString().match(/(process engineer|analytical chemist|scientist|sr.scientist|research scientist|test Engineer|Medical Devices professional|scientific)/i)){
vA[i][11]='Y';
}
}
rg.setValues(vA);//rewrites the data into the range including all changes all at one time
}
我无法测试它。我希望这有帮助。如果我误解了你的问题,请告诉我。我总是可以删除我的答案。