因此,我正在尝试创建一个考勤系统。基本上,我希望人们能够在名为考勤的表格中输入其ID号。在该列中输入信息后,相邻列(第2列)将使用其名称填充,而下一列(第三列)将使用输入时间填充。输入时间是使用新的Date()计算的。但是,我计划让它从位于名为“列表”的工作表上的主列表中检索名称。 “列表”表的ID在A列中,名称在B列中。所以我要做的是让google脚本通过查看最近编辑的单元格在Vlistup中模拟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”)),实际上它确实在相邻的位置返回了“ test”从而使我相信问题在于我试图模仿Vlookup。
答案 0 :(得分:2)
尝试一下:
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('');
}
}
}
}
答案 1 :(得分:0)
我相信要更改此行:
sheet.getRange(r.getRow(),r.getColumn()+1.setValue(data[i][2]);
对此:
sheet.getRange(r.getRow(),r.getColumn()+1).setValue(data[i][1]);
应该解决您的问题。
data [i] [2]对应于第 i 行和第3列(A列),但是我相信您想要data [i] [1],它将是列B。