Как скопировать форму Google с таблицей Google новому владельцу - PullRequest
0 голосов
/ 24 марта 2019

Мне нужна помощь в исправлении скрипта.В настоящее время у меня есть скрипт, который позволяет мне копировать лист из мастер-формы.

Проблема:
Если у меня есть форма, связанная с листом, сценарий НЕ копирует форму.Я хочу скопировать форму и ссылку на каждую копию листа.


Я нашел замечательный скрипт приложения (спасибо youtuber Карл Эрроу Смит), который позволяет мне копировать лист из мастер-формы!Это код:

function copyfilefromsource() {
  var ui = SpreadsheetApp.getUi();

  var sheet_merge = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("List");
  var last_row = sheet_merge.getLastRow();

  var newsheet_firstname = null;
  var newsheet_surname = null;
  var newsheet_email = null;
  var source_folder = null;
  var file_owner = null;
  var dest_folder = null;
  var sheets_created = 0;
  var new_file = null;
  var source_file = null;
  var student_id = null;
  var google_domain = null;
  var range = sheet_merge.getRange(1, 1, last_row, 4);
  var temp = null;

  source_file = DriveApp.getFileById(range.getCell(1, 2).getValue()); //gets the source file to copy  
  dest_folder = DriveApp.getFolderById(range.getCell(2, 2).getValue()); //gets the ID of the folder to place the copied files into
  file_owner = range.getCell(3, 2).getValue(); //person to own the files
  google_domain = range.getCell(4, 2).getValue(); //extension of the email address 

  if (last_row <= 6) {
    SpreadsheetApp.getUi().alert("No rows to process!");
    return
  }

  for (var i = 7; i <= last_row; i++) { // loop to go down evenery row from 7 until the end
    if (range.getCell(i, 4).getValue() == '') { //makes sure there is nothing in the column, i.e. can run the script with some students already been processed if it fails half way through.
      student_id = range.getCell(i, 1).getValue(); //take the first column for the     
      newsheet_email = student_id + google_domain; //combines with username with the domain; 
      // should add some user checking code here!!!!! and only run the below if user exists (future improvement)

      newsheet_firstname = range.getCell(i, 2).getValue(); //gets first name from the sheet
      newsheet_surname = range.getCell(i, 3).getValue(); //gets surname from the sheet

      new_file = source_file.makeCopy(source_file.getName() + " - " + newsheet_firstname + " " + newsheet_surname + " - " + student_id, dest_folder);
      new_file.setOwner(file_owner); //allocates an owner to the sheet
      new_file.addViewer(newsheet_email); //allocates a viewer to the sheet
      //new_file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW); //adds anyone with the link as a viewer

      //source_folder.removeFile(new_file); // hides from root folder  not required as going directly to correrrect folder
      // new_file.setActiveSheet('My Grades');
      //new_file.getRange(2,3).setValue(student_id);

      //change the a cell in the copied spreadsheet to the student ID 
      //var ss = SpreadsheetApp.openById(new_file.getId());
      //var sheet = ss.getSheets()[0]; // "access data on different tabs"
      //var sheet = ss.getSheetByName('My Grades');
      // ss.setActiveSheet(sheet);
      // ss.getRange('C2').setValue(student_id);

      //Add the details that the process has worked
      SpreadsheetApp.getActiveSheet().getRange(i, 1).setFormula('=HYPERLINK("' + new_file.getUrl() + '/","' + student_id + '")');
      SpreadsheetApp.getActiveSheet().getRange(i, 4).setValue(new_file.getId());

      sheets_created++; // add to spreadsheets created
    }
  }
  ui.alert(sheets_created + " files were created!")
}

Однако у меня есть форма, связанная с листом, и этот скрипт не скопировал форму.

Я хочу скопировать форму и ссылку накаждая копия листа.

Сценарий приложения по существу ссылается на лист.Исходный файл и папка добавляются на лист.Каждый раз, когда вы вводите имя человека и первую часть электронного письма в лист (копия ниже), он создает копию листа.У меня вопрос, как мне добавить в скрипт, чтобы получить форму ссылки для копирования.

Ссылка на мою электронную таблицу


Я нашел второй скрипт в StackOverflow, который, похоже, решает аналогичную проблему ( Копирование таблицы Google больше не копирует ссылкиФорма ), и я попытался добавить к ней сценарий, но на самом деле спустя 48 часов я только что сделал беспорядок и не продвинулся вообще.

1-й пост здесь, так что будьте спокойны, если я не дал достаточно информации.спасибо

Конечный результат должен быть в форме и ссылка для копирования с листа

...