Google电子表格自定义菜单快捷方式“文件 - 导入 - 上传”对话框

时间:2017-02-10 13:31:36

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

我在Google Spreadsheets中为电子表格构建了自定义菜单。我要添加的最后一件事是一个菜单项,其中包含文件的快捷方式 - 导入 - 上传(从您的计算机中选择一个文件)对话框。

我尝试使用Google Picker,使用了以下示例:https://developers.google.com/apps-script/guides/dialogs#file-open_dialogs

我的工作正常,但Google Picker可以很好地从Google云端硬盘中选择文件。 我只需要从我的自定义菜单打开文件 - 导入 - 上传(从您的计算机中选择一个文件)对话框。 我觉得这样做很容易,但还没想出来。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以使用输入Type =" file"上传文件。对话框中的HTML元素就像这样。

GS脚本:

// Your menu item must call FileUplaodDialog when clicked.
    function FileUploadDialog() {
      var html = HtmlService.createHtmlOutputFromFile('FileInput')
      .setHeight(100)
      SpreadsheetApp.getUi() 
          .showModalDialog(html, 'File upload dialog');
    }


function uploadFile(frmdata) {
  var fileBlob = frmdata.fileToUpload
  if(fileBlob.getName() != "") {
  var fldrSssn = DriveApp.getFolderById("Your Folder ID Here");
   var picFile=  fldrSssn.createFile(fileBlob);
  }

}

HTML文件:FileInput

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <form id="fileform" onsubmit="event.preventDefault()">
    <input type="file" id ="file" name="fileToUpload">  
    <input type="Button" value="Upload" onclick="uploadthis(this.parentNode)">
    </form>
  </body>

  <script>
  function uploadthis(frmData){
    google.script.run
    .withSuccessHandler(closeDialog)
    .withFailureHandler(alertFailure)
    .uploadFile(frmData);

  }

  function closeDialog(){
  google.script.host.close()
  }

  function alertFailure(error){
  google.script.host.close()
  alert("failed Upload"+error.message)
  }
  </script>

</html>

基本上,这会在对话框中创建一个可用于获取fileBlob的表单。此fileBlob用于在驱动器中创建文件。

答案 1 :(得分:0)

如果您正在使用Google Picker和Apps脚本查找代码示例,则可以使用Amit Agarwal的样本here

这是教程中的一个片段:

function onOpen() {
  SpreadsheetApp.getUi().createMenu('Google Picker')
      .addItem('Choose Folder', 'showPicker')
      .addToUi();
}

/**
 * Displays an HTML-service dialog in Google Sheets that contains client-side
 * JavaScript code for the Google Picker API.
 */
function showPicker() {
  var html = HtmlService.createHtmlOutputFromFile('Picker.html')
      .setWidth(600)
      .setHeight(425)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  SpreadsheetApp.getUi().showModalDialog(html, 'Select Folder');
}

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