Вопрос:

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

google-apps-script google-drive-sdk google-docs google-docs-api

22050 просмотра

4 ответа

75 Репутация автора

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

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

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

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

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

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

Автор: user1798533 Источник Размещён: 04.11.2012 07:16

Ответы (4)


14 плюса

4965 Репутация автора

Решение

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

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

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

    Права доступа

  2. Захватите идентификатор файла из URL -

    введите описание изображения здесь

  3. Напишите веб-приложение в Apps 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>');
    }
    
  4. Разверните его, чтобы запустить от имени пользователя, обращающегося к приложению.

    развернуть настройки

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

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

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

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

Автор: Arun Nagarajan Размещён: 06.11.2012 01:23

3 плюса

681 Репутация автора

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

Автор: user3411192 Размещён: 16.09.2015 06:05

6 плюса

2654 Репутация автора

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

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

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

Автор: Riyafa Abdul Hameed Размещён: 09.04.2016 07:19

0 плюса

1708 Репутация автора

Вот код, чтобы сделать это правильно (по состоянию на 2019 год):

/**
 * Create custom menu when document is opened.
 */
function onOpen() {
  DocumentApp.getUi()
    .createMenu('For Students')
    .addItem('Make a copy', 'makeACopy')
    .addToUi();
}

function makeACopy() {
  var templateId = DocumentApp.getActiveDocument().getId();
  DriveApp.getFileById(templateId).makeCopy();
}

Вам также нужно будет добавить триггер для вызова onOpenфункции при открытии документа, как указано в этом ответе.

Автор: v.karbovnichy Размещён: 03.04.2019 05:01
Вопросы из категории :
32x32