Google Apps Script: Импорт функций из других файлов

В Google Apps Script, как и в любом другом языке программирования, организация кода играет ключевую роль в поддержке и расширяемости проектов. Импорт функций из других файлов – это мощный инструмент, позволяющий структурировать код, повторно использовать его и упрощать обслуживание.

Зачем импортировать функции из других файлов?

Представьте себе проект, который разросся до сотен или даже тысяч строк кода. Работать с таким монолитом становится крайне сложно. Импорт функций позволяет разбить проект на логические модули, каждый из которых отвечает за определенную задачу. Это делает код более читаемым, понятным и легким в отладке.

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

Улучшение структуры проекта. Разделение кода на модули позволяет создать более четкую и понятную структуру проекта.

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

Обзор способов организации кода в Google Apps Script

Существует несколько способов организации кода в Google Apps Script:

Один файл. Все функции находятся в одном файле. Подходит для небольших проектов.

Несколько файлов (скриптов). Функции разделены по разным файлам в рамках одного проекта Google Apps Script.

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

Способы импорта функций в Google Apps Script

В Google Apps Script существует несколько способов импорта функций из других файлов. Рассмотрим наиболее распространенные и рекомендуемые методы.

Использование библиотеки Google Apps Script

Библиотека Google Apps Script – это контейнер для функций и констант, который можно подключить к другим скриптам. Это наиболее эффективный и рекомендуемый способ повторного использования кода в Google Apps Script.

Создание и публикация библиотеки

Создайте новый проект Google Apps Script.

Напишите функции, которые вы хотите сделать доступными в виде библиотеки. Например:

/**
 *  Функция, удваивающая число.
 *
 *  @param {number} number Число для удвоения.
 *  @return {number} Удвоенное число.
 */
function doubleNumber(number: number): number {
  return number * 2;
}

Опубликуйте проект как библиотеку: Опубликовать -> Развернуть как библиотеку.

Задайте версию библиотеки и укажите, кто может ее использовать (только вы или все пользователи).

Запишите ID библиотеки. Он понадобится для подключения библиотеки к другим скриптам.

Импорт библиотеки в другой скрипт

Откройте проект Google Apps Script, в который вы хотите импортировать библиотеку.

Перейдите в Ресурсы -> Библиотеки.

Вставьте ID библиотеки и нажмите Найти.

Выберите нужную версию библиотеки и укажите псевдоним (имя, по которому вы будете обращаться к функциям библиотеки).

Нажмите Сохранить.

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

// Предположим, что псевдоним библиотеки - 'MyLib'
function myFunction() {
  const result = MyLib.doubleNumber(5);
  Logger.log(result); // Выведет 10
}

Использование `eval()` (не рекомендуется)

Функция eval() позволяет выполнить строку кода как JavaScript. Теоретически, можно прочитать содержимое другого файла и выполнить его с помощью eval().

Объяснение причин, по которым не рекомендуется использовать `eval()`

Безопасность. eval() может привести к выполнению вредоносного кода, если содержимое файла, который вы выполняете, не является доверенным.

Производительность. eval() работает медленнее, чем другие способы импорта кода.

Отладка. Отладка кода, который выполняется с помощью eval(), может быть затруднена.

Поддержка. Код, использующий eval(), сложнее поддерживать и понимать.

Альтернативные подходы к организации кода

Вместо eval() используйте библиотеки Google Apps Script или разделите код на несколько файлов в рамках одного проекта и вызывайте функции напрямую.

Практический пример: Импорт функций для работы с Google Sheets

Рассмотрим пример создания библиотеки для работы с Google Sheets и ее использования в другом скрипте.

Создание библиотеки с функциями для работы с таблицами

Создадим библиотеку, содержащую функции для получения и записи данных в Google Sheets.

Функция для получения данных из таблицы

/**
 *  Получает данные из указанной таблицы Google Sheets.
 *
 *  @param {string} spreadsheetId ID таблицы.
 *  @param {string} sheetName Название листа.
 *  @param {number} startRow Начальная строка.
 *  @param {number} startColumn Начальный столбец.
 *  @param {number} numRows Количество строк.
 *  @param {number} numColumns Количество столбцов.
 *  @return {Array<Array>} Двумерный массив с данными.
 */
function getDataFromSheet(
  spreadsheetId: string,
  sheetName: string,
  startRow: number,
  startColumn: number,
  numRows: number,
  numColumns: number
): any[][] {
  const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  const sheet = spreadsheet.getSheetByName(sheetName);
  if (!sheet) {
    throw new Error(`Sheet with name '${sheetName}' not found.`);
  }
  const range = sheet.getRange(startRow, startColumn, numRows, numColumns);
  return range.getValues();
}
Реклама

Функция для записи данных в таблицу

/**
 *  Записывает данные в указанную таблицу Google Sheets.
 *
 *  @param {string} spreadsheetId ID таблицы.
 *  @param {string} sheetName Название листа.
 *  @param {number} startRow Начальная строка.
 *  @param {number} startColumn Начальный столбец.
 *  @param {Array<Array>} data Данные для записи (двумерный массив).
 */
function writeDataToSheet(
  spreadsheetId: string,
  sheetName: string,
  startRow: number,
  startColumn: number,
  data: any[][]
): void {
  const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  const sheet = spreadsheet.getSheetByName(sheetName);
   if (!sheet) {
    throw new Error(`Sheet with name '${sheetName}' not found.`);
  }
  const numRows = data.length;
  const numColumns = data[0].length;
  const range = sheet.getRange(startRow, startColumn, numRows, numColumns);
  range.setValues(data);
}

Публикация библиотеки

Опубликуйте проект с этими функциями как библиотеку, как описано выше.

Импорт библиотеки в новый скрипт Google Apps Script

Создайте новый скрипт Google Apps Script и импортируйте созданную библиотеку.

Использование импортированных функций

function main() {
  const spreadsheetId = 'YOUR_SPREADSHEET_ID'; // Замените на ID вашей таблицы
  const sheetName = 'Sheet1';

  // Чтение данных
  const data = MySheetLib.getDataFromSheet(spreadsheetId, sheetName, 1, 1, 10, 5);
  Logger.log(data);

  // Запись данных
  const newData = [['Новые данные 1', 'Новые данные 2'], ['Новые данные 3', 'Новые данные 4']];
  MySheetLib.writeDataToSheet(spreadsheetId, sheetName, 11, 1, newData);
}

Замените YOUR_SPREADSHEET_ID на фактический ID вашей таблицы Google Sheets. Убедитесь, что псевдоним для импортированной библиотеки установлен как MySheetLib.

Преимущества и недостатки использования библиотек

Преимущества повторного использования кода

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

Упрощение поддержки и обновления кода

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

Ограничения библиотек (например, версии)

У библиотек есть версии. При изменении библиотеки вам нужно будет опубликовать новую версию и обновить ее в проектах, которые ее используют. Это может потребовать дополнительных действий, особенно если у вас много проектов, зависящих от библиотеки.

Рекомендации по организации проектов Google Apps Script

Структурирование кода для удобства поддержки

Разбивайте код на логические модули.

Используйте осмысленные имена для функций и переменных.

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

Избегайте глобальных переменных.

Использование комментариев и документации

Пишите комментарии, объясняющие назначение функций и сложных участков кода.

Используйте JSDoc для документирования функций (как в примерах выше).

Поддерживайте документацию в актуальном состоянии.

Контроль версий с использованием Git (если возможно)

Хотя Google Apps Script не имеет встроенной поддержки Git, можно использовать сторонние инструменты, такие как clasp, для управления версиями кода и синхронизации его с репозиторием Git. Это значительно упрощает совместную работу над проектами и позволяет отслеживать изменения в коде.

Заключение

Краткое содержание методов импорта функций

В этой статье мы рассмотрели основные способы импорта функций в Google Apps Script:

Использование библиотек Google Apps Script (рекомендуемый способ).

Использование eval() (не рекомендуется).

Использование библиотек – это наиболее эффективный и безопасный способ организации и повторного использования кода в Google Apps Script.

Дальнейшие шаги и ресурсы для изучения Google Apps Script

Официальная документация Google Apps Script: https://developers.google.com/apps-script

clasp — CLI для работы с Google Apps Script: https://github.com/google/clasp

Изучайте документацию, экспериментируйте с кодом и создавайте свои библиотеки для упрощения разработки проектов на Google Apps Script.


Добавить комментарий