gpt4 book ai didi

javascript - 与 IN 或 OUT 状态匹配的值的最后一行

转载 作者:行者123 更新时间:2023-12-03 07:04:36 25 4
gpt4 key购买 nike

我正在尝试编写一个代码来显示用户在谷歌部署的网络应用程序上是进还是出。
如屏幕截图所示,数据记录在 Google 表格中
enter image description here
我试图做的是根据谷歌工作表记录在网络应用程序上显示员工的状态是进还是出。
这是我的代码

//Status in/out

function statusIdication(){
var user = Session.getActiveUser().getEmail();
var employee = AdminDirectory.Users.get(user).name.fullName;

var ss = SpreadsheetApp.getActiveSpreadsheet();
var mainSheet = ss.getSheetByName("MAIN");
var lastRow = mainSheet.getLastRow();
var lastColoum = mainSheet.getLastColumn();


for (var j = 1; j <= lastRow; j++){
var mainSheet2 = ss.getSheetByName("MAIN").getRange(j,5).getValues();
var mainSheet3 = ss.getSheetByName("MAIN").getRange(j,1).getValues();
var status = (mainSheet2 =="IN" && mainSheet3 == employee) ;
if (status = true){
var notification = "IN";
Logger.log(notification);
}
else{
var notifaction2 = "OUT";
}

}


}
示例 - 如果员工的最后一个条目 彼得 = 在 然后返回状态为 IN否则 OUT .
我不确定我哪里出错了,我得到了一个空的输出。

最佳答案

问题:
据我所知,你有以下 两个问题:

  • if使用赋值运算符的条件 =而不是相等运算符 == .因为您分配了值 truestatus ,第一if块语句每次都会执行。
  • 第二个问题必须在这里做:
    var mainSheet2 = ss.getSheetByName("MAIN").getRange(j,5).getValues();
    var mainSheet3 = ss.getSheetByName("MAIN").getRange(j,1).getValues();
    var status = (mainSheet2 =="IN" && mainSheet3 == employee) ;
    您正在使用 getValues但这会返回 二维 大批。您应该使用 getValue()相反,因为您指的是单个单元格。因此,最后一行中的比较也将起作用。

  • 请注意,您正在使用 ss.getSheetByName("MAIN")三次。使用您存储它的变量是一个好习惯,否则您会进行不必要的调用。
    解决方案:
    function statusIdication(){
    var user = Session.getActiveUser().getEmail();
    var employee = AdminDirectory.Users.get(user).name.fullName;

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var mainSheet = ss.getSheetByName("MAIN");
    var lastRow = mainSheet.getLastRow();
    var lastColoum = mainSheet.getLastColumn();


    for (var j = 1; j <= lastRow; j++){
    var mainSheet2 = mainSheet.getRange(j,5).getValue();
    var mainSheet3 = mainSheet.getRange(j,1).getValue();
    var status = (mainSheet2 =="IN" && mainSheet3 == employee) ;
    if (status == true){
    var notification = "IN";
    Logger.log(notification);
    }
    else{
    var notifaction2 = "OUT";
    }

    }


    }
    优化方案:
    获取完整数据,而不是反复调用 getRangegetValue :
    function statusIdication(){

    var user = Session.getActiveUser().getEmail();
    var employee = AdminDirectory.Users.get(user).name.fullName;
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var mainSheet = ss.getSheetByName("MAIN");
    var data = mainSheet.getDataRange().getValues();

    for (var j = 0; j < data.length; j++){
    var row = data[j];
    var mainSheet2 = row[4];
    var mainSheet3 = row[0];
    var status = (mainSheet2 =="IN" && mainSheet3 == employee) ;
    if (status == true){
    var notification = "IN";
    Logger.log(notification);
    }
    else{
    var notifaction2 = "OUT";
    }

    }

    关于javascript - 与 IN 或 OUT 状态匹配的值的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65035877/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com