我正在努力解决如何将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中使用全局变量,所以这是下一个障碍。
答案 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的变量真的让我感到困惑 - 回调最初似乎并没有等待结果,所以这完全让我困惑,因为它是异步的。希望这有助于其他人(如果你看到我做错了什么,请大声喊出来)。