努力在选择器

时间:2016-04-23 01:20:28

标签: javascript google-apps-script google-spreadsheet-api google-picker

我正在努力解决如何将Google脚本表中的ID重新放回HTML表格中。我希望使用activespreadsheet的父文件夹ID作为使用选择器打开的文件夹。电子表格只会在一个文件夹中,因此只有一个父级。

这是我将用于查找文件夹ID的代码

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

我希望在构建选择器时在HTML表单中使用该文件夹ID(pkrPF)。

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 个答案:

答案 0 :(得分:1)

发布答案以便关闭。

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

相关代码片段:
(HTML表格)

@model.changes      # => {"column" => ["oldValue", "newValue"]}

...

</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();
    }

在服务器端code.gs表上 (我已经将示例函数getOAuthToken重命名为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);

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

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