Script, чтобы автоматически сделать копию документа Google для редактирования

Я чувствую себя как полная публикация noob здесь. Я очень хорошо знаю CSS, HTML и XML, но всегда избегал JS. Я знаю очень мало javascript и недавно начал курс Lynda.com, чтобы наверстать упущенное. Извините за мое невежество. Таким образом, я действительно боюсь изучать Google Apps Script. Очевидно, мне нужно изучить JS, прежде чем я смогу понять его.

Школа, в которой я работаю (5000 студентов), разработала онлайн-учебную программу. Я создал учебную программу в виде тысяч рабочих листов документа Google. Эти рабочие листы связаны на разных сайтах.

Проблема, с которой мы сталкиваемся, заключается в том, что, когда студенты открывают документы, они должны сделать копию их, прежде чем они смогут их редактировать (я, конечно, не хочу, чтобы они могли редактировать оригиналы). Это действительно отстой для студентов, использующих мобильные браузеры на своих планшетах, так как копирование в Google Docs не очень хорошо работает при использовании пользовательского интерфейса на мобильных устройствах.

Я знаю, что это может быть автоматизировано с помощью Script. Я посмотрел здесь, и он не работает и работает! Я с радостью мочу штаны, поскольку я искал такую ​​функциональность в течение трех лет. (Да, я знаю это печально).

Итак, я прошу, кто-нибудь захочет помочь noob выяснить, как адаптировать этот код, чтобы ученики нажали кнопку на уроке веб-сайта, и он автоматически делает и открывает копию лист на новой вкладке?

/**
 * Copy an existing file.
 *
 * @param {String} originFileId ID of the origin file to copy.
 * @param {String} copyTitle Title of the copy.
 */
function copyFile(originFileId, copyTitle) {
  var body = {'title': copyTitle};
  var request = gapi.client.drive.files.copy({
    'fileId': originFileId,
    'resource': body
  });
  request.execute(function(resp) {
    console.log('Copy ID: ' + resp.id);
  });
} 

Проведя весь день вчера, изучая Javascript, мне еще предстоит пройти долгий путь. Не уверен, сколько времени мне понадобится, чтобы понять это самостоятельно.

Ответ 1

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

Вот как я это сделаю -

  • Убедитесь, что исходный документ по крайней мере доступен для чтения для людей, которые будут получать доступ к нему.

    Access rights

  • Возьмите файл с URL-адресом -

    enter image description here

  • Напишите веб-приложение в приложениях Script со следующим кодом -

    function doGet(e) {
      //file has to be at least readable by the person running the script
      var fileId = e.parameters.fileId;  
      if(!fileId){
        //have a default fileId for testing. 
        fileId = '1K7OA1lnzphJRuJ7ZjCfLu83MSwOXoEKWY6BuqYitTQQ'; 
      }
      var newUrl = DocsList.getFileById(fileId).makeCopy('File copied to my drive').getUrl(); 
      return HtmlService.createHtmlOutput('<h1><a href="'+newUrl+'">Open Document</a></h1>');
    }
    
  • Разверните его для запуска в качестве пользователя, обращающегося к приложению.

    deploy settings

Следует помнить, что веб-приложение, созданное приложениями Script, не может автоматически открывать новое окно. Вместо этого мы можем показать ссылку, которая можно щелкнуть в документе в режиме редактирования.

Здесь вы можете увидеть его в действии (создаст какой-то фиктивный файл) -

https://script.google.com/macros/s/AKfycbyvxkYqgPQEb3ICieywqWrQ2-2KWb-V0MghR2xayQyExFgVT2h3/exec?fileId=0AkJNj_IM2wiPdGhsNEJzZ2RtZU9NaHc4QXdvbHhSM0E

Вы можете проверить это, вставив свой собственный fileId.

Ответ 2

Так как DocsList устарел, в настоящее время вы можете сделать копию файла, используя следующий код:

File file=DriveApp.getFileById(fileId).makeCopy(fileName, folder);

где fileId можно получить, как описано в ответе Аруном Нагараджаном.