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
Google apps script 如何允许webapp在DriveApp中创建文件_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 如何允许webapp在DriveApp中创建文件

Google apps script 如何允许webapp在DriveApp中创建文件,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一组受保护的电子表格文件,两个用户可以访问这些文件。它们中的每一个都有一个脚本,该脚本使用一个库中的函数来触发web应用程序(允许用户以管理员身份运行函数) 我想让用户可以选择创建给定电子表格文件的副本。现在,如果用户使用“文件”->“创建副本”,则: 成为文件的所有者(管理员必须是所有者!),用户必须手动更改它 用户上的保护已关闭-管理员必须手动更改 我已决定将代码添加到在管理员帐户上运行的webapp: DriveApp.getFileById(fileId).makeCopy();

我有一组受保护的电子表格文件,两个用户可以访问这些文件。它们中的每一个都有一个脚本,该脚本使用一个库中的函数来触发web应用程序(允许用户以管理员身份运行函数)

我想让用户可以选择创建给定电子表格文件的副本。现在,如果用户使用“文件”->“创建副本”,则:

  • 成为文件的所有者(管理员必须是所有者!),用户必须手动更改它
  • 用户上的保护已关闭-管理员必须手动更改
  • 我已决定将代码添加到在管理员帐户上运行的webapp:

    DriveApp.getFileById(fileId).makeCopy();
    
    这样,文件的副本将从管理员帐户生成。这意味着管理员将是文件的所有者,保护将对用户起作用

    不幸的是,我得到了一个错误:

    例外:Nie masz uprawnień,aby wywołać:DriveApp.getFileById。Wymagane Uprawnieria:(| |)

    我知道该web应用程序无法访问google drive。 是否可以仅允许此web应用在驱动器中创建新文件

    或者用户是否有其他方法(没有webapp)来创建文件副本并实现自动化:对用户启用保护并更改文件所有者

    In webapp File -> Proterties -> Scopes I have found:
    
    文件中的脚本:

    function stworzKopiePliku(){
      Kosztoryslibrary.stworzKopiePliku();
    }
    
    库中的脚本:

    var url = "...";
    function stworzKopiePliku(url){
      stworzKopieP(url);
    }
    
    function stworzKopieP() {
      var urlScript = SpreadsheetApp.getActiveSpreadsheet().getUrl();
      var fileId = SpreadsheetApp.getActiveSpreadsheet().getId(); 
      var type = "stworzKopiePliku";
      var urlParam = (url+"?urlScript="+urlScript+"&type="+type+"&fileId="+fileId);  
    
      var html = "<script>window.open('" + urlParam + "');google.script.host.close();</script>";
      var userInterface = HtmlService.createHtmlOutput(html);
      SpreadsheetApp.getUi().showModalDialog(userInterface, "skrypt w trakcie działania...");
    }
    
    }


    我在许多其他函数中使用了非常类似的代码,并且所有代码都正常工作。唯一的问题似乎是webapp无法访问google drive来创建文件。

    单击“查看”菜单并选择“显示清单文件”,文件“appsscript.json”将在代码编辑器中打开。如果您没有看到
    “oauthScopes”:[scope here]
    ,那么这些作用域是在内部处理的。您可以在“appsscript.json”(清单)文件中显式设置应用程序脚本项目将使用的作用域。当您运行某些代码时,代码会检查授权的作用域,并在需要时提示您授权新的作用域。您的appsscript.json文件是否设置了
    “oauthScopes”:[scope here]
    ?在appsscript.json中,我只找到了:
    {“时区”:“Europe/Paris”,“dependencies”:{},“webapp”:{“access”:“ANONYMOUS”,“executeAs”:“USER\u Deployment”},“exceptionLogging”:“STACKDRIVER”,“runtimeVersion”:“V8”}
    您的用户需要授权web应用。直接运行任何函数都会触发授权,
    DriveApp.getFileById(fileId.makeCopy()要从中运行的代码?绑定到工作表的项目?还是网络应用?如果是从web应用运行的,则复制文件会将文件放入web应用所有者的驱动器中,因为web应用正在以“用户部署”的身份执行
    它是Web应用程序的所有者。我会将Web应用程序构建为一个独立的应用程序,并将所有支持文件放在一个共享驱动器中,并且不会在Web应用程序中硬连接任何文件ID或导入访问代码。始终从共享驱动器中的支持文件中获取它们。这样,您就可以作为当前用户和任何人进行部署。你想要访问的人需要有一个gmail帐户,并且他们需要访问这个共享帐户。如果无法访问共享帐户,任何人都只能看到没有数据、也无法获取数据的第一页。无法创建共享驱动器?好吧,也许是时候开始使用付费账户了。
    function doGet(e) {
    
      var urlScript = e.parameter.urlScript;
      var type = e.parameter.type;
      var fileId = e.parameter.fileId;
    
      if(type == "stworzKopiePliku"){
      DriveApp.getFileById(fileId).makeCopy();  
      }