我想知道是否有人知道是否可以向上搜索一个值,而不是通常在列中向上搜索。
之所以问,是因为我目前正在准备一个访客表,该表将从Google表单中记录到Google表格中。 每个访客都会获得一个ID /通行证编号,该ID /通行证编号将用于记录他们的出入时间。
现在的问题是,如果两个人使用相同的ID,它将仅更改初始条目的进入和退出时间,而不会更改最新条目。
因此,我想知道是否有人知道或者有可能使脚本可以向上搜索(以便先找到较新的条目),或者有人知道一个命令以便它不会覆盖先前的条目(忽略已经在单元格中记录了时间的条目)。
我已经尝试使用QUERY和IMPORTRANGE将其分类到新的标签中,但是我无法将时间记录到新的标签上。
var ss = SpreadsheetApp.openByUrl("sheet_url");
var sheet = ss.getSheetByName("Sheet_name");
function doGet(e){
var action = e.parameter.action;
if(action == "in")
return inTime(e);
if(action == "out")
return outTime(e);
}
function doPost(e){
var action = e.parameter.action;
if(action == "in")
return inTime(e);
if(action == "out")
return outTime(e);
}
function inTime(e){
var id = e.parameter.id;
var values = sheet.getRange(2,1,sheet.getLastRow(),1).getValues();
for(var i = 0 ; i<values.length ; i++){
if(values[i][0] == id){
i=i+2;
var in_time = Utilities.formatDate(new Date(), "GMT+8", "HH:mm:ss");
sheet.getRange(i,8).setValue(in_time);
return ContentService.createTextOutput("Check In Time "+in_time).setMimeType(ContentService.MimeType.TEXT);
}
return ContentService.createTextOutput("Id Not Found").setMimeType(ContentService.MimeType.TEXT);
}
function outTime(e){
var id = e.parameter.id;
var values = sheet.getRange(2,1,sheet.getLastRow(),1).getValues();
for(var i = 0 ; i<values.length ; i++){
if(values[i][0] == id){
i=i+2;
var out_time = Utilities.formatDate(new Date(), "GMT+8", "HH:mm:ss");
sheet.getRange(i,9).setValue(out_time);
return ContentService.createTextOutput("Check Out Time "+out_time).setMimeType(ContentService.MimeType.TEXT);
}
}
return ContentService.createTextOutput("Id Not Found").setMimeType(ContentService.MimeType.TEXT);
}
答案 0 :(得分:1)
浏览“值”时,您可以向上/向后查找第一个较新的条目(假设较新的位于底部):
for (var i = (values.length - 1); i > -1; i--) {
对于另一个问题,关于如何检查第8列中的单元格是否为空白,您可以尝试以下方法:
if (values[i][0] == id && values[i][7] == "") {
答案 1 :(得分:0)
对于您的脚本而言,一个好的解决方案是在循环内部实现辅助变量var k=values.length-i-1
,该循环允许您向后循环。
您的循环将如下所示:
function inTime(e){
var id = e.parameter.id;
var values = sheet.getRange(2,1,sheet.getLastRow(),1).getValues();
for(var i = 0 ; i<values.length ; i++){
var k=values.length-i-1;
if(values[k][0] == id){
k=k+2;
var in_time = Utilities.formatDate(new Date(), "GMT+8", "HH:mm:ss");
sheet.getRange(k,8).setValue(in_time);
return ContentService.createTextOutput("Check In Time "+in_time).setMimeType(ContentService.MimeType.TEXT);
}
}
}