Google apps script 允许单个用户一次编辑Google电子表格
我有谷歌电子表格说“A”,作为一个存储库。其他用户可以阅读其内容。我希望允许其他用户从不同的电子表格运行脚本来修改“a”的内容,但我希望它一个接一个地发生,以便记录所有用户的更改&而不是丢失 我试着在“A”中添加一张工作表,其第一个单元格的值具有当前编辑器的用户名&当当前编辑器释放工作表时,它会将第一个单元格的值设置为空白。以便队列中的其他用户可以检查其是否可供编辑。他们可以通过将第一个单元格设置为用户名来开始编辑它。问题是等待编辑器端的等待脚本无法捕获第一个单元格值的更改。所以,即使当前的编辑器发布了“A”,其他人也无法开始编辑 请帮忙 例如: SS-“A” 它是一个数据存储库,包含每个用户的数据 SS-“B” 这将分发给所有用户。他们可以在其中添加自己的信息,然后按Save,这样就可以将信息添加到“A”中。现在,如果两个用户单击“一起保存”,则一个用户的更新可能会被另一个用户覆盖 我在SS中有这个代码-“B” 在继续执行save命令之前,它会不断检查“Lock”表中的单元格A1是否为空Google apps script 允许单个用户一次编辑Google电子表格,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有谷歌电子表格说“A”,作为一个存储库。其他用户可以阅读其内容。我希望允许其他用户从不同的电子表格运行脚本来修改“a”的内容,但我希望它一个接一个地发生,以便记录所有用户的更改&而不是丢失 我试着在“A”中添加一张工作表,其第一个单元格的值具有当前编辑器的用户名&当当前编辑器释放工作表时,它会将第一个单元格的值设置为空白。以便队列中的其他用户可以检查其是否可供编辑。他们可以通过将第一个单元格设置为用户名来开始编辑它。问题是等待编辑器端的等待脚本无法捕获第一个单元格值的更改。所以,即使当前的编辑
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.
};
如果您想知道,如何以简洁的格式使用锁服务
希望有帮助你是否考虑使用而不是把名字放在可修改的单元格上?您可以在此变量上设置一个条件,如果用户已经在编辑您的文件,该条件会阻止用户。但我可以从其他电子表格访问电子表格的属性类吗?我不只是想阻止其他用户,我希望他们等待并保持轮询,以便在工作表空闲时开始编辑。你能给我们一个示例电子表格和一些使用示例吗?我在问题中添加了示例和代码。谢谢你,杰克:)