У меня есть сценарий в моей электронной таблице Google, который сохраняет мою таблицу 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 Диска

1
Roberto Junior 26 Окт 2019 в 05:36

1 ответ

Лучший ответ
  • Когда файл blablabla.xlsx существует в определенной папке FOLDER_ID, вы хотите перезаписать файл blablabla.xlsx.
  • Или, когда файл blablabla.xlsx существует в определенной папке FOLDER_ID, вы хотите удалить существующий файл и создать его как новый файл.

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

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

Схема 1:

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

Измененный скрипт:

При изменении вашего сценария измените его следующим образом.

Из:
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);
  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);
}

Схема 2:

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

Измененный скрипт:

При изменении вашего сценария измените его следующим образом.

Из:
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);
}

Заметка:

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

Ссылки:

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

2
Tanaike 26 Окт 2019 в 09:05
Большое спасибо! я не разработчик, но я использую gscript с электронной таблицей Google для работы с командой и делаю некоторые вещи возможными! Схема 1 лучше! я использовал шаблон 2, но иногда у меня возникают проблемы с задержкой удаления/создания файла, когда работает более 1 человека
 – 
Roberto Junior
1 Ноя 2019 в 01:07
Джуниор Спасибо за ответ. Я рад, что ваша проблема была решена. По поводу вашего нового выпуска i was using pattern 2 but some times i have problem with the delay erasing/creating a file with more than 1 person working, хотя я не уверен, правильно ли я его понимаю, как насчет использования Lock Service? Ссылка? Если это не решило вашу проблему, можете ли вы опубликовать ее как новый вопрос, включив подробную информацию? Таким образом, это поможет пользователям, включая меня, подумать о решении. В то время, пожалуйста, закройте этот вопрос.
 – 
Tanaike
1 Ноя 2019 в 01:14
Я думаю, что я не могу использовать это, служба блокировки. Файл листа является совместным, некоторые люди используют одновременно в разных ячейках листы, но один и тот же файл. Эта процедура выполняется все время «при редактировании», экспортируя версию листа XLSX для использования другим программным обеспечением, использующим этот экспортированный файл.
 – 
Roberto Junior
1 Ноя 2019 в 02:32
Джуниор Спасибо за ответ. Я должен извиниться за мое плохое знание английского языка. Что касается вашего нового вопроса, из вашего ответа я не могу понять ситуацию в деталях. И я не вижу этого в вашем вопросе. Итак, вы можете опубликовать его как новый вопрос, включив подробную информацию? Таким образом, это поможет пользователям подумать о решении. Если вы можете сотрудничать, чтобы решить вашу проблему, я рад. Я глубоко извиняюсь, что я не могу решить вашу новую проблему в ближайшее время.
 – 
Tanaike
1 Ноя 2019 в 02:42
Джуниор Спасибо за ответ. Но я должен извиниться, что я не могу решить вашу новую проблему.
 – 
Tanaike
1 Ноя 2019 в 05:16