所以我正在尝试创建一个考勤系统。基本上我想要的是人们能够在名为出勤的表格中输入他们的身份证号码。在该列中输入信息后,相邻列(第 2 列)将填充其名称,下一列(第三列)将填充输入时间。进入时间使用 new Date() 计算。但是我计划让它从位于名为“list”的工作表上的主列表中检索名称。“列表”表的 ID 在 A 列中,名称在 B 列中。所以我想要做的是让谷歌脚本通过查看最近编辑的单元格来模拟 Vlookup,然后在“列表”列 A 中搜索该值将相邻列中相应的“列表”列 B 值返回到刚刚编辑的单元格。我希望能够在整个“出勤”表中多次执行此操作。所以基本上,我们每天出勤将占据“出勤”表中的三列。
function onEdit(e) {
var sheet = e.source.getActiveSheet();
if (sheet.getName() === "Attendance") {
var r = e.source.getActiveRange();
if (r.getRow() != 1 && r.getColumn()%3 != 0 && r.getColumn()%3 != 2) {
sheet.getRange(r.getRow(),r.getColumn()+2).setValue(new Date());
var popsheet = SpreadsheetApp.getActiveSpreadsheet.GetSheetByName("list")
var data=popsheet.getRange("A1:D100").getValues();
for(i=0;i<data.length;++i){
if (data[i][0]==r.GetValue()){
sheet.getRange(r.getRow(),r.getColumn()+1).setValue(data[i][1]);
}
}
}
日期填充得很好,但名称不填充。我没有收到任何错误消息。我尝试将 var popsheet = ... 之后写入的所有内容更改为仅 sheet.getRange(r.getRow(),r.getColumn()+1.setValue("test") 并且它实际上确实在相邻的编辑单元格的列。所以这让我相信问题出在我试图模拟 Vlookup 上。
试试这个:
function onEdit(e) {
var sheet = e.source.getActiveSheet();
if(sheet.getName()=="Attendance") {
if (e.range.rowStart > 1 && e.range.columnStart % 3 == 1) {
var sh=e.source.getSheetByName("list");
e.source.toast(sh.getName());
var data=sh.getRange(2,1,sh.getLastRow(),4).getValues();
for(i=0;i<data.length;i++){
if (data[i][0]==e.value){
e.range.offset(0,1).setValue(data[i][2]);
e.range.offset(0,2).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy HH:mm:ss"));
}
}
}
}
}
如果未找到名称,这将清除同一行的下两列。
function onEdit(e) {
var sheet = e.source.getActiveSheet();
if(sheet.getName()=="Attendance") {
if (e.range.rowStart > 1 && e.range.columnStart % 3 == 1) {
var sh=e.source.getSheetByName("list");
e.source.toast(sh.getName());
var data=sh.getRange(2,1,sh.getLastRow(),4).getValues();
var found=false;
for(i=0;i<data.length;i++){
if (data[i][0]==e.value){
e.range.offset(0,1).setValue(data[i][2]);
e.range.offset(0,2).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy HH:mm:ss"));
found=true;
}
}
if(!found) {
e.range.offset(0,1).setValue('');
e.range.offset(0,2).setValue('');
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句