我正在尝试从数据范围中获取值,循环数据,匹配该数据中的值,然后根据匹配值,更新位于几列的单元格。
我能够找到匹配的值,但是我很难理解如何更新几列的单元格。下面是我到目前为止得到的代码减去.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中的数据。目前它将找到并找到匹配项。
我现在想要的是基于匹配,在同一行中查看两列,并根据成功找到匹配将单元格值更新为“已批准”或“已拒绝”。
我对如何让它写入单元格有点迷失。我应该尝试识别它的行,然后设置值吗?也许抓住匹配所在的整行(进入数组),然后重写行?
任何帮助都将受到赞赏..
答案 0 :(得分:3)
要设置一个值,您只需要计算使用从零开始的数组,但在电子表格中我们开始计算一个。您还需要确保尝试在现有单元格中写入。所以在写之前,添加必要的列 我没有写过&#34;否认&#34;部分因为它正在通过电子表格的所有单元格,但我写了一个managerDecision函数的第二个版本,我只通过一个列,在这里我处理了被拒绝的部分。
这里是代码:
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");
}
}
}