通过Google App脚本上载CSV / Excel文件作为工作表

时间:2019-07-08 20:39:10

标签: google-apps-script file-upload

我看到Drive Folder类具有一个createFile(),它使用three arguments for name, content, and mimeType

是否可以将其用作上载呼叫的一部分,而无需一次call the REST API directlyconvert=true一起上传并转换用户文件(到Google Docs)?

例如,以下是HTML:

<html>
  <head>
    <base target="_top">
  <script>
  function handler(response) {
    document.getElementById('uploader').innerHTML = "Uploaded file! " + response;
  }
  </script>

</head>
  <body>
  <div id="uploader">
  <form>
   <input type="file" name="theFile">
   <input type="button" onclick="google.script.run.withSuccessHandler(handler).uploadFile(this.parentNode)" value="Upload!">
  </form></div>
</body>
</html>

这是Google脚本代码:

function uploadFile(e) {
  Logger.log("Uploading file!");
  var dfolder = DriveApp.getFolderById('abcdefgh');  // replace w/ Drive FolderID
  return dfolder.createFile(e.theFile).getName();
}

如何将最后一行更改为:

return dfolder.createFile(newName, e.theFile, MimeType.GOOGLE_SHEETS);

我现在想弄清楚的事情仅仅是如何获取要上传的文件的名称(例如,newName)。然后如何将e.theFile形式转换为字符串。如果现在按原样尝试,则会出现错误:

  

无效的参数:uploadFile处的file.contentType(代码:31)

1 个答案:

答案 0 :(得分:2)

  • 您要使用google.script.run上传CSV和Excel文件。
  • 文件上传后,您想要转换为Google Spreadsheet。
  • 您要检索上传文件的文件名。

如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。

我认为您需要在脚本中修改Google Apps脚本。

修改点:

  • e.theFileuploadFile(e)的值是blob。因此,您可以使用getName()来检索文件名。
  • 您可以使用Drive API将CSV和Excel格式转换为Google Spreadsheet。在这种情况下,我在高级Google服务中使用了Drive API v2。
  • 错误Invalid argument: file.contentType at uploadFile的原因是MimeType.GOOGLE_SHEETS的mimeType不能与createFile()一起使用。

修改后的脚本:

请如下修改uploadFile()。使用此脚本之前,请在高级Google服务中启用Drive API,并将文件夹ID设置为folderId

function uploadFile(e) {
  Logger.log("Uploading file!");

  // I modified below script.
  var folderId = "###"; // Please set the folder ID here.
  var blob = e.theFile;
  var filename = blob.getName();
  var mimeType = blob.getContentType();
  if (mimeType == MimeType.CSV || mimeType == MimeType.MICROSOFT_EXCEL || mimeType == MimeType.MICROSOFT_EXCEL_LEGACY) {
    return Drive.Files.insert({title: filename, mimeType: MimeType.GOOGLE_SHEETS, parents: [{id: folderId}]}, blob).title;
  }
  return "";
}

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。