簡體   English   中英

如何讓 Google File Picker 腳本在公開共享的 Google Sheet 上啟動?

[英]How do I get Google File Picker script to launch on a publicly shared google sheet?

我已經設置了一個可安裝的觸發器,當我的谷歌工作表被打開 [showPicker()] 時,它會啟動一個谷歌選擇器功能。 任何人都可以通過 url 訪問谷歌表。

當我打開谷歌表時,腳本運行良好,文件選擇器顯示在屏幕上。 但是,當我登錄到與我共享 Google 表格的其他帳戶時,腳本似乎沒有運行,並且在打開電子表格時文件選擇器也沒有顯示。

.GS 文件

function showPicker() {
  var html = HtmlService.createHtmlOutputFromFile('Picker.html')
      .setWidth(600)
      .setHeight(425)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
 SpreadsheetApp.getUi().showModalDialog(html, 'Select CSV File');
}

function getOAuthToken() {
  DriveApp.getRootFolder();
  return ScriptApp.getOAuthToken();
}

Picker.html 文件

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">
  <script type="text/javascript">
    var DIALOG_DIMENSIONS = {
        width: 600,
        height: 425
    };
    var pickerApiLoaded = false;

    function onApiLoad() {
        gapi.load('picker', {
            'callback': function() {
                pickerApiLoaded = true;
            }
        });
        google.script.run.withSuccessHandler(createPicker)
            .withFailureHandler(showError).getOAuthToken();
    }

    function createPicker(token) {

        if (pickerApiLoaded && token) {

            var docsView = new google.picker.DocsView()
                .setIncludeFolders(true)
                .setMimeTypes('application/vnd.google-apps.folder,text/csv')
                //.setSelectFolderEnabled(true);

            var picker = new google.picker.PickerBuilder()
                .addView(docsView)
                .enableFeature(google.picker.Feature.NAV_HIDDEN)
                .hideTitleBar()
                .setSize(DIALOG_DIMENSIONS.width - 2, DIALOG_DIMENSIONS.height - 2)
                .setOAuthToken(token)
                .setCallback(pickerCallback)
                .setOrigin('https://docs.google.com')
                .build();

            picker.setVisible(true);

        } else {
            showError('Unable to load the file picker.');
        }
    }

    /**
     * A callback function that extracts the chosen document's metadata from the
     * response object. For details on the response object, see
     * https://developers.google.com/picker/docs/result
     *
     * @param {object} data The response object.
     */
    function pickerCallback(data) {
        var action = data[google.picker.Response.ACTION];
        if (action == google.picker.Action.PICKED) {
            var doc = data[google.picker.Response.DOCUMENTS][0];
            var id = doc[google.picker.Document.ID];
            // Show the ID of the Google Drive folder
            //document.getElementById('result').innerHTML = id;
            //Run Import CSV
        google.script.run.withFailureHandler(onFailure)
          .importCSVFromGoogleDrive(id);

            //google.script.run.importCSVFromGoogleDrive(id);

            google.script.host.close();

        } else if (action == google.picker.Action.CANCEL) {
            google.script.host.close();
        }
    }

    function showError(message) {
        document.getElementById('result').innerHTML = 'Error: ' + message;
    }

    function onFailure(error) {
        var div = document.getElementById('output');
        div.innerHTML = "ERROR: " + error.message;
      }
  </script>
</head>

<body>
    <div>
        <p id='result'></p>
        <div id="output"></div>
    </div>
    <script type="text/javascript" src="https://apis.google.com/js/api.js?onload=onApiLoad"></script>
</body>
</html>

我曾嘗試查看有關共享用戶授權的文檔,但我有點迷茫,不知道為什么腳本無法啟動? 任何幫助將不勝感激 :)

堆棧驅動程序日志(使用其他谷歌帳戶):

Error - Sep 2, 2019, 6:05:36 PM - You do not have permission to call showModalDialog at showPicker(Code:724) 

執行轉錄(使用其他谷歌賬戶):

[19-09-02 01:05:36:307 PDT] HtmlService.createHtmlOutputFromFile([Picker.html])[0 seconds] 
[19-09-02 01:05:36:308 PDT] HtmlOutput.setWidth([600]) [0 seconds] 
[19-09-02 01:05:36:308 PDT] HtmlOutput.setHeight([425]) [0 seconds] 
[19-09-02 01:05:36:309 PDT] HtmlOutput.setSandboxMode([IFRAME]) [0 seconds] 
[19-09-02 01:05:36:310 PDT] SpreadsheetApp.getUi() [0 seconds] 
[19-09-02 01:05:36:315 PDT] Execution failed: You do not have permission to call showModalDialog (line 724, file "Code") 
[0.004 seconds total runtime] 

只有電子表格的所有者才能觸發 html 對話框。 當其他用戶打開您的電子表格時,將創建一個錯誤報告,說明他們無權調用無模式對話框。 我猜這是一個安全功能。

其他用戶可以通過從菜單下拉菜單中進行選擇來手動打開選擇器。

但是,您可以為打開電子表格的每個人觸發 Browser.msgBox()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM