google-apps-script - 通过 Google App 脚本将 CSV/Excel 文件上传为工作表

标签 google-apps-script file-upload google-drive-api

我看到 Drive Folder 类有一个 createFile() ,它需要 three arguments for name, content, and mimeType 。是否可以将此用作上传调用的一部分,以便一次性上传并转换用户文件(到 Google 文档),而无需 call the REST API directlyconvert=true

例如,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 的任何形式转换为字符串。如果我现在按原样尝试,则会收到错误:

Invalid argument: file.contentType at uploadFile(Code:31)

最佳答案

  • 您想要使用 google.script.run 上传 CSV 和 Excel 文件。
  • 文件上传后,您希望将其转换为 Google 电子表格。
  • 您想要检索已上传文件的文件名。

如果我的理解是正确的,那么这个修改怎么样?请将此视为多个答案之一。

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

修改点:

  • uploadFile(e)e.theFile 的值是 blob。因此,您可以使用 getName() 检索文件名。
  • 您可以使用 Drive API 将 CSV 和 Excel 格式转换为 Google 电子表格。在本例中,我在高级 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 "";
}

引用文献:

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

关于google-apps-script - 通过 Google App 脚本将 CSV/Excel 文件上传为工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942273/

相关文章:

javascript - 如何在 Google Apps 脚本中使用 google.script.run 将 JS 对象传递给服务器函数?

javascript - 弹出窗口阻止 chrome 中的 gdrive 授权

javascript - 谷歌授权弹出窗口卡在 chrome 扩展中

javascript - blueimp jquery 文件上传 - "done"、 "complete"回调不适用于 IE 9

grails - 如何从.gsp文件的形式上传照片,将其保存到某个文件夹并将其链接保存到数据库?

google-apps-script - DriveApp 从 GmailApp 附件创建文件不起作用

javascript - 为什么我的 for 循环运行额外的迭代而不复制到正确的单元格

google-apps-script - 如何修改事件系列的特定实例

http - 使用 `UrlFetchApp` 的 PUT 请求返回 'Bad Request' 但 Google Apps 脚本之外的相同请求有效

java - 无法解析多部分请求org.apache.commons.fileupload.FileUploadException : Processing of multipart/form-data request failed. null