0

我很努力地学习如何从谷歌脚本表中取回ID到HTML表格中。我希望使用activespreadsheet的父文件夹ID作为使用选取器打开的文件夹。电子表格将只在一个文件夹中,因此只有一个父文件夹。在选择器中努力设置第一个查看文件夹

这是我打算用找到的文件夹ID

function ThisFilePF() { 
    var FileID = SpreadsheetApp.getActiveSpreadsheet().getId() 
    var ThisFileParentFolders = DriveApp.getFileById(FileID).getParents() 
    return ThisFileParentFolders.next().getId() 
} 

我想接着(pkrPF)在HTML表中使用机械手正在兴建时,该文件夹的ID码。

function createPicker(token) { 
    if (pickerApiLoaded && token) { 
    google.script.run.ThisFilePF() 
    var PickFolder = new google.picker.DocsView().setParent(pkrPF) 
     .setIncludeFolders(true) 
     .setSelectFolderEnabled(true); 
    var picker = new google.picker.PickerBuilder() 
     .addView(PickFolder) 
     .setSelectableMimeTypes('application/vnd.google-apps.folder') 
     .enableFeature(google.picker.Feature.NAV_HIDDEN) 
     .hideTitleBar() 
     .setOAuthToken(token) 
     .setDeveloperKey(DEVELOPER_KEY) 
     .setCallback(pickerCallback) 
     .setOrigin(google.script.host.origin) 
     .setSize(DIALOG_DIMENSIONS.width - 2, 
       DIALOG_DIMENSIONS.height - 2) 
     .build(); 
    picker.setVisible(true); 
    } else { 
    showError('Unable to load the file picker.'); 
    } 
} 

我知道我在这里犯了一些基本的错误,但任何指针,将不胜感激。

编辑: 可能会更接近一点,但仍不知道如何将变量数据放入createpicker函数。

我改变google.script.run.ThisFilePF()来google.script.run.withSuccessHandler(getPkrFdrView).ThisFilePF(); 并添加此功能

function getPkrFdrView(pkrPF) { 
    pkrPFID = pkrPF 
    alert("pkrPFID = " + pkrPFID) 
} 

警报弹出窗口显示的文件夹ID获取渡过难关。 我只需要弄清楚如何得到createpicker函数。我读过,你应该避免在JavaScript中使用全局变量,所以这是下一个障碍。

回答

1

发布答案,以便关闭。

我通过运行代码以在创建标记的同时获取FileID来修复它。这样,我已经有了createpicker运行时的数据,并且可以在函数中使用它。我从标准getOAuthCall()返回一个数组,因为这是我在服务器端添加代码的地方。

相关的代码片段:
(HTML页)

</head> 
<body> 
    <div> 
    <p> Please select the property you wish the ticket folder to be created in. </p> 
    <button onclick='getOAuthToken()'>Select a Folder</button> 
    <br> 

...

function getOAuthToken() { 
     google.script.run.withSuccessHandler(createPicker) 
      .withFailureHandler(showError).getOAuthTokenGS(); 
    } 

...

function createPicker(returned) { 
    var token = returned.token 
    var pkrPF = returned.pkrPF 
    if (pickerApiLoaded && token) { 
    var PickFolder = new google.picker.DocsView().setParent(pkrPF) 
     .setIncludeFolders(true) 
     .setSelectFolderEnabled(true); 

和服务器端code.gs片
(我已经重新命名了示例函数离子getOAuthToken到getOAuthTokenGS我的理解)

function getOAuthTokenGS() { 
    DriveApp.getRootFolder(); 
    var token = ScriptApp.getOAuthToken() 
    var FileID = SpreadsheetApp.getActiveSpreadsheet().getId() 
    var ThisFileParentFolders = DriveApp.getFileById(FileID).getParents() 
    var pkrPF = ThisFileParentFolders.next().getId() 
    return {token : token, pkrPF : pkrPF} 
} 

而当选择器打开的,而不是显示系统上的根文件夹和所有的文件夹现在,它显示了一个包含我的电子表格的文件夹中的内容。

将那些从脚本传递给HTML的变量真的让我感到困惑 - 回调看起来并没有等待结果,所以这完全让我感到困惑,因为它是异步的。希望这可以帮助别人(如果你看到我做错了什么,请大声喊出来)。

+0

我认为你原来的帖子唯一的问题是,你没有设置'google.script.run.ThisFilePF()'返回任何变量(特别是pkrPF)的值。有几种方法可以做到这一点,但将返回值发送到一个单独的函数'createPicker'似乎完全适合我。 –

相关问题