Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 允许单个用户一次编辑Google电子表格_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 允许单个用户一次编辑Google电子表格

Google apps script 允许单个用户一次编辑Google电子表格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有谷歌电子表格说“A”,作为一个存储库。其他用户可以阅读其内容。我希望允许其他用户从不同的电子表格运行脚本来修改“a”的内容,但我希望它一个接一个地发生,以便记录所有用户的更改&而不是丢失 我试着在“A”中添加一张工作表,其第一个单元格的值具有当前编辑器的用户名&当当前编辑器释放工作表时,它会将第一个单元格的值设置为空白。以便队列中的其他用户可以检查其是否可供编辑。他们可以通过将第一个单元格设置为用户名来开始编辑它。问题是等待编辑器端的等待脚本无法捕获第一个单元格值的更改。所以,即使当前的编辑

我有谷歌电子表格说“A”,作为一个存储库。其他用户可以阅读其内容。我希望允许其他用户从不同的电子表格运行脚本来修改“a”的内容,但我希望它一个接一个地发生,以便记录所有用户的更改&而不是丢失

我试着在“A”中添加一张工作表,其第一个单元格的值具有当前编辑器的用户名&当当前编辑器释放工作表时,它会将第一个单元格的值设置为空白。以便队列中的其他用户可以检查其是否可供编辑。他们可以通过将第一个单元格设置为用户名来开始编辑它。问题是等待编辑器端的等待脚本无法捕获第一个单元格值的更改。所以,即使当前的编辑器发布了“A”,其他人也无法开始编辑

请帮忙

例如: SS-“A” 它是一个数据存储库,包含每个用户的数据

SS-“B” 这将分发给所有用户。他们可以在其中添加自己的信息,然后按Save,这样就可以将信息添加到“A”中。现在,如果两个用户单击“一起保存”,则一个用户的更新可能会被另一个用户覆盖

我在SS中有这个代码-“B” 在继续执行save命令之前,它会不断检查“Lock”表中的单元格A1是否为空

function savedata(){

  var s1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");  

  var wb = SpreadsheetApp.openById("XYZ");
  var lck = wb.getSheetByName("Lock");

  var uname = getUserEmail();

//Code stucks here, even if cell A1 in "Lock" sheet is set to blank if this loop has started it keeps on looping here. Logger continues to report old value of A1 cell.

  while(lck.getRange(1,1).getValue()!=""){
    Logger.log(lck.getRange(1,1).getValue(), lck.getRange(1,1).getValue());
  }

  lck.getRange(1,1).setValue(uname);

   //Save data commands

  lck.getRange(1,1).setValue("");

};

如果所有用户都使用同一工作表中的同一脚本进行编辑,则可以使用锁定服务作为防止并发访问代码

修改代码,如下所示:

function savedata(){

  var s1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");  

  var wb = SpreadsheetApp.openById("XYZ");
  var lck = wb.getSheetByName("Lock");

  var uname = getUserEmail();
  var lock = LockService.getScriptLock();
  var success = lock.tryLock(10000);            // Try getting lock for 10sec 
  if (!success) {
    Logger.log("Currently Busy, Try again later") 
    return
    } else {
           Logger.log(lck.getRange(1,1).getValue(), lck.getRange(1,1).getValue());
    }

   lck.getRange(1,1).setValue(uname);

   //Save data commands

   lck.getRange(1,1).setValue("");
   lock.releaseLock()             //release lock so someone else can update. 
    };
如果您想知道,如何以简洁的格式使用锁服务


希望有帮助