比较两列onEdit,如果匹配,则将新添加的颜色上色

时间:2019-07-14 09:22:23

标签: excel google-apps-script google-sheets

我正在尝试通过扫描QR码并将其信息添加到工作表中来验证某事件的参与者。 在QRstuff.com上可以生成QR扫描并将其导入到在线Excel文件中。 工作表中有一个名称列表,我希望将刚添加的扫描onEdit与工作表中已存在的列表(添加后立即进行比较)进行比较,并将新名称涂成某种颜色。

我试图更改一些在SO上找到的代码,但无法使其正常工作。

 var sh = SpreadsheetApp.getActiveSheet();
 var lr = sh.getLastRow()// get the last row number with data
 var data = sh.getRange(1,1,lr,1).getValues(); // get only columns C.D,& E.  Starting at row 2 thur the last row
 //var data = sh.getDataRange().getValues();// read all data in the sheet
 for(n=0;n<data.length-1;++n){ // iterate row by row and examine data in column D
 //  if(data[n][0].toString().match('dsf')=='dsf'){
 if(data[8][1].match(/Pavel/i)){ //changed to find either upper or lower case dfs or with other text in string.
  data[n][2] = 'w';
  data[n][0] = '1.2'};
  }
  sh.getRange(1,1,data.length,data[3].length).setValues(data); // write back to the sheet only Col C,D,& E
 }


1 个答案:

答案 0 :(得分:1)

以下是您可能需要修复的几件事:

%dopar%

这将从第1行到最后一行获取A列中的数据。

该评论说,您想要从第2行到最后一行的C,D和E列中的数据。为此,将代码更改为

var data = sh.getRange(1,1,lr,1).getValues(); // get only columns C.D,& E.  Starting at row 2 thur the last row

类似地,当您将数据发布回表中时

var data = sh.getRange(2, 3, lr - 1, 3).getValues();

这会将其发布到从A1到C列最后一行的范围内。

要从第2行开始写入C,D和E列,请使用:

sh.getRange(1,1,data.length,data[3].length).setValues(data); // write back to the sheet only Col C,D,& E

遍历数据时:

sh.getRange(2, 3, data.length, data[3].length).setValues(data);

这将忽略数据的最后一行。

要遍历所有行,请使用:

for(n=0;n<data.length-1;++n)

我不清楚该行的作用

for (var n = 0; n < data.length; ++n)

但是只想指出,当您遍历所有数据行时,这将始终检查第9行(data [8])。

如果您需要检查B列中该行的值,则需要将其更改为data [n] [1]。

如果仅检查特定行,则可以在循环外对其进行一次检查并存储结果,而不必反复检查。

希望这会有所帮助。