Создание Google Sheet в указанной папке c с помощью DriveApp - PullRequest
0 голосов
/ 29 января 2020

Я хочу создать Google Sheet в указанной папке c на Google Диске с помощью Google Apps Script. В соответствии с документацией класса File:

createFile (name, content, mimeType)

Создает файл в текущей папке с заданным имя, содержимое и тип MIME. Выдает исключение, если содержимое превышает 10 МБ.

// Create an HTML file with the content "Hello, world!"
DriveApp.getRootFolder().createFile('New HTML File', '<b>Hello, world!</b>', MimeType.HTML);

И в соответствии с MimeType документацией :

Enum MimeType

Перечисление, обеспечивающее доступ к объявлениям MIME-типа без явного ввода строк. Методы, которые ожидают, что тип MIME будет отображаться в виде строки (например, 'image / png'), также принимают любое из значений, указанных ниже, при условии, что метод поддерживает базовый тип MIME.

Существует нет упоминания о createFile, поддерживающем только подмножество доступных типов MIME. На странице есть таблица, которая включает этот тип MIME:

GOOGLE_SHEETS Enum Representation of MIME type for a Google Sheets file.

Моя проблема заключается в реализации этого метода создания файла, как описано в File документация.

var folder = DriveApp.createFolder('new folder');
var ss = folder.createFile('new sheet', '', MimeType.GOOGLE_SHEETS);

Это приведет к ошибке, в которой будет указано

Недопустимый аргумент: file.contentType (строка 2, файл "Код")

Замена MimeType.GOOGLE_SHEETS на строку application/vnd.google-apps.spreadsheet явно не помогла. Мне известен этот вопрос , но принятый ответ просто допускает поражение и использует общий грязный обходной путь, создав файл в SpreadsheetApp, скопировав его и удалив оригинал. Этот вопрос имеет столь же разочаровывающий принятый ответ на ту же проблему, за исключением Google Docs. Обходной путь SpreadsheetApp хорош, но я надеюсь, что через 3 года кто-то ответит, как правильно использовать createFile.

Ответы [ 2 ]

1 голос
/ 29 января 2020

Попробуйте это:

function createFolderAndFile() {
  var folder = DriveApp.createFolder('RootSub');
  var file = SpreadsheetApp.create('RootSubSheet');
  Drive.Files.update({"parents": [{"id": folder.getId()}]}, file.getId());
}
0 голосов
/ 30 января 2020

Система отслеживания проблем Google имеет длинную и длинную историю задаваемых вопросов. Еще в 2014 году сотрудник Google объявил , что это решенная проблема, и решили, что файлы типа MimeType.GOOGLE_ не могут быть созданы методом createFile.

Помечено как исправленное.

После тщательного рассмотрения мы определили, что DriveApp.createFile () не следует использовать для создания файлов MimeType.GOOGLE_ *.

Вскоре, попытка сделать поэтому произойдет сбой, что приведет к более описательному сообщению об ошибке.

К сожалению, несмотря на обещание иного, сообщение об ошибке никогда не изменялось, и документация никогда не обновлялась, чтобы отразить это "всестороннее рассмотрение".

Правильное решение для добавления файла типа MimeType.GOOGLE_ в указанную папку c с 1 вызовом сервера (без копирования, удаления или обновления) -

var folder = DriveApp.createFolder('folder');
var file = {
    title: 'New Sheet',
    mimeType: MimeType.GOOGLE_SHEETS,
    parents: [{id: folder.getId()}]
}
ssId = Drive.Files.insert(file).id;

Drive.Files.insert требует Advanced Drive Service , которую вы можете включить в своем сценарии с помощью этого руководства.

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