Скрипт для автоматического создания копии документа Google для редактирования

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

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

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

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

Итак, я спрашиваю,кто-нибудь хотел бы помочь 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, мне еще предстоит пройти долгий путь. Не уверен, сколько времени мне понадобится, чтобы разобраться в этом самостоятельно.

3 ответов


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

вот как я бы сделал это -

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

    Access rights

  2. возьмите fileId из URL -

    enter image description here

  3. написать web app в приложениях скрипт со следующим кодом -

    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>');
    }
    
  4. разверните его для запуска от лица, обращающегося к приложению.

    deploy settings

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

Вы можете увидеть его в действии здесь (будет создать пустой файл) -

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

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


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

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

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


обновление с 2015 года, скрипт Google удалил fileId по неизвестным причинам. Предыдущий метод добавления "/ copy " к URL-адресу документа Google был повторно включен. Ex) https://docs.google.com/document/d/1GTGuLqahAKS3ptjrfLSYCjKz4FBecv4dITPuKfdnrmY/copy