Макрос для гугл листа - PullRequest
       6

Макрос для гугл листа

0 голосов
/ 29 октября 2019

У меня есть проблема, я создал лист Google с именем "test". В этом файле есть ссылка на слайд Google, и я хочу, чтобы при создании копии "тестового" файла файл слайдов Google также делал копию и обновлял ссылку на слайд Google.

Не могли бы вы помочь мне, пожалуйста?

Заранее спасибо. Totox

1 Ответ

0 голосов
/ 30 октября 2019

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

Что должно произойти:

  1. Скопируйте файл таблицы
  2. Найдите слайды, на которые есть ссылки в электронной таблице
  3. Скопируйте слайды в новый файл
  4. В копии электронной таблицы обновите ссылку, чтобы отразить новый файл

Для этого вы будете использовать файл скрипта приложения, прикрепленный к вашему листу. Этот сценарий создаст пользовательское меню для добавления функциональности в ваши листы.

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

Вот код (с комментариями):

function onOpen(e) {
  SpreadsheetApp.getUi()
  .createMenu("Custom Actions") //Creates a custom menu item called "Custom Actions"
  .addItem("Clone Files", "cloneFiles") //Adds a clickable button to call the cloneFiles() function.
  .addToUi(); //Displays the new menu.
}

function cloneFiles() {
  var originalSheet = DriveApp.getFileById(
    SpreadsheetApp.getActive().getId()); //Get the file Id of the current Spreadsheet.
  var originalSlide = DriveApp.getFileById(
    SlidesApp.openByUrl( //Opens the spreadsheet with the URL
      SpreadsheetApp.getActive()
      .getSheetByName("Sheet1") //Gets the url on Sheet1
      .getRange("A1")           //On cell A1
      .getValue()).getId()); //Get the file Id 

  var newSheet = originalSheet.makeCopy("New Sheet"); //Create a copy and name it "New Sheet"
  var newSlide = originalSlide.makeCopy("New Slide"); //Create a copy and name it "New Slide"

  SpreadsheetApp.flush(); //Forces the spreadsheets to be updated to their final value.

  SpreadsheetApp.open(newSheet).getSheetByName("Sheet1").getRange("A1").setValue(newSlide.getUrl()); //Then alters the url to the copied file.

  SpreadsheetApp.getUi().showModalDialog(
    HtmlService.createHtmlOutput("<p>New Files Created!<p><ul><li><a href='"+newSheet.getUrl()+"'>New Sheet</a></li><li><a href='"+newSlide.getUrl()+"'>New Slide</a></ul>")
  .setHeight(150)
  .setWidth(150), "Copied files");
}

После добавления этого на свой лист, каждый раз, когда пользователь открывает его, он увидитдополнительная кнопка:

Custom action Menu

После нажатия нашего специального действия они увидят приятное всплывающее окно с новыми ссылками:

Result Box

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...