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'似乎完全適合我。 –

相關問題