Загрузить файл CSV / Excel в виде листа через Google App Script - PullRequest
2 голосов
/ 08 июля 2019

Я вижу, что класс Drive Folder имеет метод createFile (), который принимает три аргумента для имени, содержимого и mimeType .Можно ли использовать это как часть вызова загрузки, чтобы загружать и преобразовывать пользовательский файл (в Документы Google) одновременно, без необходимости прямого вызова REST API с convert=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 Script:

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 в строку.Если я попробую это как есть сейчас, я получу ошибку:

Недопустимый аргумент: file.contentType в uploadFile (код: 31)

1 Ответ

2 голосов
/ 09 июля 2019
  • Вы хотите загрузить файлы CSV и Excel, используя google.script.run.
  • Когда файл загружен, вы хотите преобразовать его в таблицу Google.
  • Вы хотите получить имя файла загруженного файла.

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Я думаю, что в вашем скрипте необходимо изменить скрипт Google Apps.

Очки модификации:

  • Значение e.theFile из uploadFile(e) - это блоб. Таким образом, вы можете получить имя файла, используя getName().
  • Вы можете преобразовать формат CSV и Excel в таблицу Google с помощью Drive API. В этом случае я использовал Drive API v2 в Advanced Google Services.
  • Причина ошибки Invalid argument: file.contentType at uploadFile в том, что mimeType MimeType.GOOGLE_SHEETS нельзя использовать с createFile().

Модифицированный скрипт:

Пожалуйста, измените uploadFile() следующим образом. Прежде чем использовать этот сценарий, включите Drive API в Advanced Google Services и установите идентификатор папки на 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 "";
}

Ссылки

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...