Не удалять файл с Google Диска с помощью Google Script + Google SpreadSheet - PullRequest
2 голосов
/ 26 октября 2019

У меня есть скрипт в моей таблице Google SpreadSheet, который сохраняет мои листы Google в формате XLSX при каждом внесенном мной изменении. Он работает нормально, но создает новый файл с тем же именем (много файлов с одинаковым именем, без перезаписи, в одной папке).

Я хочу удалить старый файл и сохранить новую версию ИЛИ просто перезаписать файл с тем же именем

Мой код:

function getGoogleSpreadsheetAsExcel(){

  try {

    var ss = SpreadsheetApp.getActive();
    var url = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + ss.getId() + "&exportFormat=xlsx";
    var params = {
      method      : "get",
      headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
      muteHttpExceptions: true
    };

    var blob = UrlFetchApp.fetch(url, params).getBlob();
    blob.setName(ss.getName() + ".xlsx");

    // set the folder where I am working using the id
    var folder = DriveApp.getFolderById(“FOLDER_ID");

    var xname = “blablabla.xlsx"; //set the file name
    var existing = folder.getFilesByName(xname);
    if (existing.hasNext()) {
      Browser.msgBox(‘file exists, delete to save the new version after.', Browser.Buttons.OK);

    // 'DELETE THE OLD FILE FROM GOOGLE DRIVE' CODE GOES HERE      


      Browser.msgBox(‘file deleted.', Browser.Buttons.OK);
      var arquivo = folder.createFile(blob); //save the new version
      Browser.msgBox(‘new version was saved.', Browser.Buttons.OK);
    }

    else {
      Browser.msgBox(‘file does not exists, saving.', Browser.Buttons.OK);
      var arquivo = folder.createFile(blob); //save the file
      Browser.msgBox(‘file saved.', Browser.Buttons.OK); //file saved
    }


  } catch (f) {
    Logger.log(f.toString());
  }
}

Справкаудалить или перезаписать старую версию с Google Drive

1 Ответ

2 голосов
/ 26 октября 2019
  • Если файл blablabla.xlsx существует в определенной папке FOLDER_ID, вы хотите перезаписать файл blablabla.xlsx.
  • Или, если файл blablabla.xlsxсуществует в определенной папке FOLDER_ID, вы хотите удалить существующий файл и создать его как новый файл.

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

Прежде чем использовать этот измененный сценарий, , пожалуйста, включите Drive API в расширенных службах Google.

Шаблон 1:

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

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

Когда ваш скрипт модифицируется, измените его следующим образом.

From:
if (existing.hasNext()) {
  Browser.msgBox(‘file exists, delete to save the new version after.', Browser.Buttons.OK);

// 'DELETE THE OLD FILE FROM GOOGLE DRIVE' CODE GOES HERE      


  Browser.msgBox(‘file deleted.', Browser.Buttons.OK);
  var arquivo = folder.createFile(blob); //save the new version
  Browser.msgBox(‘new version was saved.', Browser.Buttons.OK);
}
To:
var arquivo; // Added
if (existing.hasNext()) {
  Browser.msgBox('file exists, delete to save the new version after.', Browser.Buttons.OK);
  Browser.msgBox('file deleted.', Browser.Buttons.OK);
  var id = Drive.Files.update({}, existing.next().getId(), blob).id; // Modified
  arquivo = DriveApp.getFileById(id); // Modified
  Browser.msgBox('new version was saved.', Browser.Buttons.OK);
}

Pattern 2:

В этом шаблоне существующий файл удаляется, а BLOB-объект создается как новый файл.

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

Когда ваш скрипт изменен, пожалуйста, измените его следующим образом.

С:
if (existing.hasNext()) {
  Browser.msgBox(‘file exists, delete to save the new version after.', Browser.Buttons.OK);

// 'DELETE THE OLD FILE FROM GOOGLE DRIVE' CODE GOES HERE      


  Browser.msgBox(‘file deleted.', Browser.Buttons.OK);
  var arquivo = folder.createFile(blob); //save the new version
  Browser.msgBox(‘new version was saved.', Browser.Buttons.OK);
}
Кому:
var arquivo; // Added
if (existing.hasNext()) {
  Browser.msgBox('file exists, delete to save the new version after.', Browser.Buttons.OK);
  Browser.msgBox('file deleted.', Browser.Buttons.OK);
  Drive.Files.remove(existing.next().getId()); // Modified
  arquivo = folder.createFile(blob); // Modified
  Browser.msgBox('new version was saved.', Browser.Buttons.OK);
}

Примечание:

  • На вышеуказанных модифицированных скриптахпри запуске сценария существующий файл перезаписывается большим двоичным объектом и / или удаляется. Поэтому, пожалуйста, будьте осторожны.
  • В вашем скрипте используется в качестве одинарной кавычки. В этом случае возникает ошибка. Пожалуйста, измените на '. Пожалуйста, будьте осторожны.

Ссылки:

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

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