Преобразование ods в листы Google

Я пытаюсь преобразовать файл ods в формат файлов листов Google. Однако, если файл немного велик (от ~ 2 МБ до 3 МБ), он несколько раз начинает представлять следующую проблему.

GoogleJsonResponseException: вызов API для drive.files.insert завершился неудачно с внутренней ошибкой

В моем коде используется попытка catcth, чтобы продолжать попытки конвертировать. Он может конвертировать после многих попыток или даже не конвертировать

var ssOrige = DriveApp.getFileById(fileId)
var ssOrigeBlob = ssOrige.getBlob()
var ssName = ssOrige.getName()

var newFile = {
    title : ssName.split('.')[0], 
    parents: [{id: folderDestinationId}]
  }
var ssDestination = null
while(!ssDestination) {
  try {
   // Cria cópia do arquivo como gSheet
   ssDestination = Drive.Files.insert(newFile, ssOrigeBlob, {convert: true})
  } catch (e) {
   Logger.log(e)
 }
}

Маленькие файлы могут иметь ту же проблему, но они, как правило, легче и быстрее конвертируются.

У меня есть файлы ods в папке на диске. Я получаю файл ods по идентификатору и пытаюсь преобразовать его в формат листов Google. Я использую Google App Script, чтобы получить файл и попытаться выполнить преобразование. Итак, я беру файл ods, который уже находится на диске Google, и пытаюсь преобразовать и сохранить его на диске.


person Diego Resende    schedule 10.12.2020    source источник
comment
Не могли бы вы предоставить образец ods file, чтобы протестировать и воспроизвести вашу ситуацию?   -  person Tanaike    schedule 11.12.2020
comment
Добавляя в запрос @Tanaike, попробуйте объяснить, что именно вы делаете. Это выполняется в node.js? Вы получаете файл из приложения браузера с помощью js?   -  person Raserhin    schedule 11.12.2020
comment
@Raserhin У меня есть файлы ods в папке на диске. Я получаю файл ods по идентификатору и пытаюсь преобразовать его в формат листов Google. Я использую Google App Script, чтобы получить файл и попытаться выполнить преобразование. Итак, я беру файл ods, который уже находится на диске Google, и пытаюсь преобразовать и сохранить его на диске.   -  person Diego Resende    schedule 11.12.2020


Ответы (1)


Вместо использования Drive API v2 попробуйте использовать Drive API v3.

Посмотрите Files.create и раздел для загрузки нового Типы Документов Google.

Этот код отлично работает для меня с несколькими файлами разного размера:

function myFunction() {
  let id = "<YOUR ODS FILE ID>";
  let file = DriveApp.getFileById(id);

  let fileBlob = file.getBlob();


  newFile = {
    name: "New File",
    mimeType: "application/vnd.google-apps.spreadsheet"
  }

  try{
    Drive.Files.create(newFile, fileBlob);
  }catch(e){
    Logger.log("Error");
    Logger.log(e);
  }
}
person Raserhin    schedule 30.12.2020