Google apps script 对其他用户更新外部工作表的自定义OneEdit函数失败,但仅在使用inputBox时失败

Google apps script 对其他用户更新外部工作表的自定义OneEdit函数失败,但仅在使用inputBox时失败,google-apps-script,inputbox,Google Apps Script,Inputbox,我无法解释原因。我有一个小谷歌表,我复制给我的妻子,让她使用。她的版本有脚本来更新我的工作表(如果它检测到缺少值) 我编写了一个自定义的onEdit()函数,该函数被称为via。我已经确认她可以编辑我的工作表:打开它并手动编辑,手动运行脚本,或者注释输入框并用静态值替换它 如果出现以下情况,则不会进行更新: *她从代码->运行菜单手动触发自定义编辑功能 *我修改代码以注释掉inputBox并使用静态值 简化代码: function custom_onEdit(){ var sheet =

我无法解释原因。我有一个小谷歌表,我复制给我的妻子,让她使用。她的版本有脚本来更新我的工作表(如果它检测到缺少值)

我编写了一个自定义的onEdit()函数,该函数被称为via。我已经确认她可以编辑我的工作表:打开它并手动编辑,手动运行脚本,或者注释输入框并用静态值替换它

如果出现以下情况,则不会进行更新: *她从代码->运行菜单手动触发自定义编辑功能 *我修改代码以注释掉inputBox并使用静态值

简化代码:

function custom_onEdit(){

  var sheet = SpreadsheetApp.getActiveSheet(),
      range = sheet.getActiveRange(),
      col = range.getColumn(), 
      row = range.getRow(), 
      value = range.getValue();

  if (value != "" && sheet.getRange(row,col+1).getValue() === ""){
    Dialog(value);
  }
}

function Dialog(v){
  var sheet = SpreadsheetApp.getActiveSheet(),
      result;

  result = Browser.inputBox('Populate the value required',Browser.Buttons.OK_CANCEL);

  if (result != 'cancel'){
    UpdateExternalSS(result,sheet.getName());
  }
}

function UpdateExternalSS(value, name){
  sheet = SpreadsheetApp.openById('abcd1234').getSheetByName(name);
  sheet.getRange('A1').setValue(value);
}
如果我注释掉对Browser.inputBox的调用并添加:

//var result = Browser.inputBox('Populate the value required',Browser.Buttons.OK_CANCEL);
var result = '9999';
它很好用

(编辑)-更多阅读-似乎是我安装的可安装触发器实际上作为我的帐户运行,因此它不运行的原因应该是零(我是这两个电子表格的所有者)

可安装触发器总是在创建它们的人的帐户下运行。例如,如果您创建了一个可安装的打开触发器,它将在您的同事打开文档时运行(如果您的同事具有编辑权限),但它将作为您的帐户运行


这是谷歌应用程序脚本中的一个老错误

  • 2012年首次报告:
  • 然后在此处报告堆栈溢出:
  • 2013年向谷歌报告,并作为副本关闭 变通办法 由于我们不能在为其他用户准备的触发脚本中使用浏览器方法,另一种方法是指示他们应该在电子表格的某些单元格中输入某些值,并使用on edit触发器获取这些值


    另外,我建议使用由触发器运行的in脚本,它直接向脚本提供活动范围和输入的值

    这应该是对上述答案的更新。我使用Browser.msgBox调用为我的电子表格创建了一个和一个编辑脚本,在我知道它不应该工作之前。它们对于简单的评论和对是非问题的回答都是正确的。使用Browser.inputBox调用时失败。那就是我找到上述答案的时候。在这种情况下,脚本在遇到inputBox调用时简单地退出。我测试了与另一个用户共享电子表格的脚本,发现msgBox调用仍然可以正常工作,这与前面答案中的报告不同。只是inputBox调用不起作用