Сценарий приложений - поиск ярлыка Gmail для всех вложений и перезапись файлов в папку Google Диска

Используя предыдущие статьи и вопросы, найденные в переполнении стека, я смог найти фрагмент скрипта приложения, который ищет ярлыки Gmail для вложений и перемещает их в определенную папку на Google Диске.

function saveAttachmentInFolder(){
  var folder = DriveApp.getFolderById('xxosi2');
  var userId = "[email protected]";
  var query = "label:thankyoucards-reports";
  var res = Gmail.Users.Messages.list(userId, {q: query});//I assumed that this works
  res.messages.forEach(function(m){
    var attA=GmailApp.getMessageById(m.id).getAttachments();
    attA.forEach(function(a){
      
      folder.createFile(a.copyBlob()).setName(a.getName());
    });
  });
}

Мне нужно изменить этот код для выполнения следующих дополнительных функций:

  1. Если файл существует, перезапишите и сохраните историю версий

Я также поиграл с ответом, найденным в следующем потоке, но безрезультатно, поскольку я считаю, что это каким-то образом жестко закодировано и слишком специфично для одного типа файла (xlsx) Копирование вложений из Gmail в папку Google Диска и перезапись старых файлы с помощью скрипта приложений.

Я должен извиниться за мое плохое знание английского языка. К сожалению, я не могу понять If file exists, overwrite and retain version history. Могу я спросить вас о деталях вашей цели?

Tanaike 23.11.2022 01:36

Я каждый день вручную обновляю те же файлы, которые обновляются из вторичной системы! Таким образом, возможность систематически обновлять файлы каждый день сэкономит мне немало времени.

Yogwhatup 23.11.2022 02:27

Спасибо за ответ. Из вашего ответа я предложил ответ. Не могли бы вы подтвердить это? Если я неправильно понял вашу цель и это было бесполезно, приношу свои извинения.

Tanaike 23.11.2022 02:39

Спасибо за ответ и тестирование. Я рад, что ваша проблема была решена. И тебе спасибо.

Tanaike 23.11.2022 03:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что ваша цель заключается в следующем.

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

В таком случае, как насчет следующей модификации? В этом случае используется Drive API. Итак, включите Drive API в расширенных сервисах Google.

От:

folder.createFile(a.copyBlob()).setName(a.getName());

К:

var filename = a.getName();
var files = folder.getFilesByName(filename);
if (files.hasNext()) {
  Drive.Files.update({}, files.next().getId(), a.copyBlob(), {supportsAllDrives: true});
} else {
  folder.createFile(a.copyBlob()).setName(filename);
}
  • При запуске этого измененного сценария существующий файл ищется в папке с использованием имени файла вложения. Когда файл найден, он перезаписывается вложенным файлом. Если файл не найден, он создается как новый файл.

Примечание:

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

Ссылка:

Другие вопросы по теме