Используйте функции из одного скрипта Google в разных таблицах (гугл-листы) - PullRequest
1 голос
/ 10 ноября 2019

я написал гугл-скрипт. В этом скрипте у меня есть функция, которую мне нужно использовать в 250+ разных таблицах (google-листов). Вопрос - как сделать так, чтобы функция была доступна в каждой таблице?

Ответы [ 3 ]

2 голосов
/ 11 ноября 2019

Да, это возможно.

Два варианта:

  • Создать проект «Сценарий приложений», который вызывает электронную таблицу 250+, выполняет операции и обновляет каждую электронную таблицу, которая приводит к результатам.

На этом вы найдете коллекцию учебных пособий, начинающихся со скрипта приложений. https://developers.google.com/apps-script/articles/tutorials

  • Создайте функцию, которую вы можете вызывать из любой ячейки вашей электронной таблицы, так же, как вы вызываете любую другую функцию по умолчанию, такую ​​как SUM ()

В этой документации выВы найдете объяснение, как сделать этот второй вариант. https://developers.google.com/apps-script/guides/sheets/functions#arguments

1 голос
/ 10 ноября 2019

Чтобы сделать скрипт или пользовательскую функцию доступными в других листах Google, опубликуйте их как библиотеку.

У Брюса Макферсона есть хороший пост о том, как это сделать: http://ramblings.mcpher.com/Home/excelquirks/gooscript/lib

0 голосов
/ 13 ноября 2019

Хорошо, я нашел решение. В моем случае файлы, которые мне нужно изменить, помещаются в разные папки и имеют похожее имя

// function that i need to execute
function updatePrices(sheetId){    
  // do some staff
  var activeSpreadsheet = SpreadsheetApp.openById(sheetId);
  var histPricesSheet = activeSpreadsheet.getSheetByName(someSheetName);
  ....
  var cell = histPricesSheet.getRange(range);
  cell.setValues(someData);
}


function walkFolders(folderId){    
  // function that walk by folders and get ids of spradsheeds 
  and call func that I need in each spradsheed that I need

  var fin_fold = DriveApp.getFolderById(folderId); 
  var folders = fin_fold.getFolders();

  while (folders.hasNext()) {

    var folder = folders.next();
    var files = folder.searchFiles('title contains "карточка"');

    while (files.hasNext()){

      var file = files.next();

      updatePrices(file.getId());    // call my function to every spreadsheet
      Logger.log("обновлено");
    }
  }
}

walkFolders("folder ID wich contain folders with files to change");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...