谷歌应用脚本 - 基于for循环匹配设置单元格的值

3
我试图获取数据范围内的数值,循环遍历数据,匹配其中的数值,然后根据匹配到的数值,更新几列之外的单元格。
我能够定位要匹配的数值,但是我不太明白如何更新几列之外的单元格。以下是我迄今为止得到的代码,不包括.setValue部分。
var trackingSS = 'Spreadsheet 1';
var decisionSS = 'Spreadsheet 2';

function grabRequestID() {
  var ss = SpreadsheetApp.openById(decissionSS);
  var range = ss.getActiveSheet().getRange(ss.getLastRow(), 2, 1, 1)
  var requestID = range.getValue(); 

  return requestID;
}

function managersDecision() {
  var ss = SpreadsheetApp.openById(trackingSS)
  var sheet = ss.getSheetByName('Requests');
  var data = sheet.getDataRange().getValues();
  var requestID = grabRequestID();

  for (var i=0; i < data.length; i++) {
    for (var j=0; j < data[i].length; j++) {
      if (data[i][j] == requestID) {
        Logger.log('found it');
      }    
     }  
    }
   }

如您所见,这里有两个函数。 managersDecision() 从电子表格1中读取所有数据。然后调用grabRequestID()并使用此值(来自电子表格2)作为匹配条件,当循环遍历来自电子表格1的数据时。目前,它会定位并找到匹配项。

现在我想要发生的是,在匹配的基础上,转到同一行中的两列并根据成功找到匹配项将单元格值更新为“approved”或“denied”。

我对如何让它写入单元格有点困惑。我应该尝试确定它所在的行,然后工作以设置该值吗?也许获取匹配项所在的整行(到一个数组中),然后重新编写该行?

任何帮助都将不胜感激。

1个回答

4
为了设置一个值,你需要注意到你正在使用从零开始的数组,但是在电子表格中我们从一开始计数。你还需要确保你正在尝试写入一个已存在的单元格。因此,在写入之前,添加必要的列。
我没有编写“被拒绝”的部分,因为它要通过电子表格的所有单元格,但我编写了managersDecision函数的第二个版本,其中我只遍历了一个列,并且在这里我处理了被拒绝的部分。
以下是代码:
var trackingSS = 'Spreadsheet1';
var decisionSS = 'Spreadsheet2';
function grabRequestID() {

  var ss = SpreadsheetApp.openById(decisionSS);
  var range = ss.getActiveSheet().getRange(ss.getLastRow(), 2, 1, 1)
  var requestID = range.getValue(); 
  Logger.log("requestID= "+requestID);
  return requestID;
}

function managersDecision() {
  var ss = SpreadsheetApp.openById(trackingSS)
  var sheet = ss.getSheetByName('Requests');
  var data = sheet.getDataRange().getValues();
  var requestID = grabRequestID();

  for (var i=0; i < data.length; i++) { // going through all the rows
    for (var j=0; j < data[i].length; j++) { // this is going through all the cell of a row
      if (data[i][j] == requestID) {
        Logger.log('found it');
        var row = Number(i)+1;
        var col = Number(j)+1+2;
        while(sheet.getMaxColumns()<col){
          sheet.insertColumnsAfter(sheet.getMaxColumns(),col-sheet.getMaxColumns());
        }
        sheet.getRange(row, col).setValue("approved");
      }    
    }  
  }
}


function managersDecision2() {
  var ss = SpreadsheetApp.openById(trackingSS)
  var sheet = ss.getSheetByName('Requests');
  var data = sheet.getRange("A:A").getValues()
  var requestID = grabRequestID();

  var col = 1+2;
  while(sheet.getMaxColumns()<col){
    sheet.insertColumnsAfter(sheet.getMaxColumns(),col-sheet.getMaxColumns());
  }

  for (var i=0; i < data.length; i++) { // going through all the rows
    var row = 1+i;
    if (data[i][0] == requestID) {
      Logger.log('found it');     
      sheet.getRange(row, col).setValue("approved");
    }
    else if(data[i][0] !=""){
      Logger.log(row)
      sheet.getRange(row, col).setValue("denied");
    }

  }
}

谢谢您的回复和提供的信息。这帮助我克服了困难。最终,我只使用了这一行代码:sheet.getRange(i+1,j+1,1,1).setValue("Approved"); - jjones312

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接