我正在尝试通过扫描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
}
答案 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]。
如果仅检查特定行,则可以在循环外对其进行一次检查并存储结果,而不必反复检查。
希望这会有所帮助。