首页 > 解决方案 > 锁定服务不适用于库脚本 App Script || AppendRow 覆盖数据,因此是 while 循环

问题描述

更新 注意:用户只能通过我与他们共享的库访问此脚本,因此所有用户将同时同时运行此代码。

如果两个用户同时运行脚本,我试图找到一种方法来避免覆盖最后一行,但是只有一个脚本正在使用,并且用户只能访问该函数的库。

我已更新代码以进行彻底审查。

  while (switchs == "True"){
  Logger.log("Starting While loop \n Do we have the lock =====> " + lock.hasLock())
  var date_name = [date, name]
  Logger.log(date_name)
  ////////Appending row after lastrow+1 creates empty rows in the range between the values
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Master Tracker").appendRow(date_name);
  SpreadsheetApp.flush();
  Utilities.sleep(3000);
  if (target.getRange(1 + lastRow).getDisplayValue() == date && target.getRange(2 + lastRow).getDisplayValue() == name){
      for (var n = 0; n <= tarRange.length+1; n++){
        if(target.getRange("A" + (n+2)).getDisplayValue() !== ""){
          Logger.log(" ----------------------------------------------- Checking Row Values")
          var check_date = target.getRange("A" + (n+2)).getDisplayValue();
          var check_name = target.getRange("B" + (n+2)).getDisplayValue();
          Logger.log("Checking Date First -- " + check_date)
          Logger.log("Checking name First -- " + check_name)
          Logger.log("Tracker name -- > " + name)
          Logger.log("Original Date -- > " + date)
          if (name == check_name && date == check_date){
            switchs = "False"
            insert = "True"
            var rownum = (n+2)  
            Logger.log("Row Number is ====> " + rownum)
            Utilities.sleep(3000);
            if (insert == "True"){
              Logger.log("=================================== |||||||| INSERT IS TRUE |||| =======================")
              for (var n = 0; n <= tarRange.length+1; n++){
                Logger.log(" ----------------------------------------------- Checking Row Values")
                var check_date = target.getRange("A" + rownum).getDisplayValue();
                var check_name = target.getRange("B" + rownum).getDisplayValue();
                Logger.log("Checking Date First -- " + check_date)
                Logger.log("Checking name First -- " + check_name)
                Logger.log("Tracker name -- > " + name)
                Logger.log("Original Date -- > " + date)
                for (var i = 1; i < data.length; ++i) {
                  var row = data[i];  
                  var cat_name =  row[0];
                  var cat_count = row[1];
                  Logger.log(" ----------- Tracker Queue Name > " + cat_name)      
                  for (var x = 2; x < headers.length; x++){
                      var header = headers[x];
                      if (cat_name == header){
                        if(check_name !== "" && check_date !== ""){
                            Logger.log(" ----------------------------------------- Getting Column Names")
                            Logger.log(" ------- Database Queue > " + header)
                            Logger.log(" ----- - Tracker Queue > " + cat_name)
                            Logger.log("==========================================================================LOOOKING FOR ===== ...> " + name + " and currently have... " + check_name)
                            Logger.log("==========================================================================LOOOKING FOR =====  ...> " + date + " and currently have ... " + check_date)
                            if ( name == check_name && date == check_date){  
                                Logger.log("=========|||||========= We have name match ===============|||||||||===============...> " + name + "and ... " + check_name)
                                Logger.log("===========|||||======== We have date match =========|||||||====================...> " + date + "and ... " + check_date)
                                Logger.log("Do we have the lock =====> " + lock.hasLock())  
                                Logger.log(" ---------------------------------------------------------------------------- Overwriting Previous Entry")
                                colNum = getColByName(cat_name);  
                                Logger.log(colNum)
                                target.getRange(rownum, colNum).setValue(cat_count)
                                switchs = "False"
                            
                        }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

我的问题出在标题中,我尝试了所有锁脚本 n doc 没有任何效果,因为它使用的是相同的代码实例,但是如果它在同一张表中运行,那么锁就像它们一样工作,但我的情况是多个用户来自多个仅将库添加到包含我的脚本的应用程序脚本中的工作表,所有这些都同时运行。

任何帮助都会很棒!

我读过一些关于 Utilities.getUuid(); 但我不确定如何在这里实现它。

标签: javascriptgoogle-sheetsscript

解决方案


推荐阅读