javascript - 锁定服务不适用于库脚本 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(); 但我不确定如何在这里实现它。
解决方案
推荐阅读
- json - 将 Json 响应转换为 DataTable / List
- unity3d - AssetBundle 缓存过程。缓存 Unity 资产包时会发生什么?ab 的哪些属性使其与其缓存形式不同?
- elasticsearch - 如何在 ElasticSearch 中有效地合并 3 个不同的搜索条件?(同时使用文本、乳胶和矢量)
- python - 如何阻止聚合函数将不需要的行添加到数据框中?
- authentication - Camel Restlet 文档说以下路由“带身份验证的端点”,但找不到路由示例
- html - SyntaxError: 意外的标记 ';' 在编译 ejs 时
- api - 如何使用 arcpullr::get_spatial_layer() 和 arcpullr::get_layer_by_poly()
- python - 如何在 Tkinter 记事本中添加“保存”、“复制”和“粘贴”?
- c++ - 在 cpp 中舍入浮点数
- emacs - emacs 以 c++ 模式挂起,启用前奏和弹丸