appsscript содержит всё, что касается сервисов Google. Это та часть библиотеки, которая работает только внутри среды Apps Script, — что это значит для тестов, разобрано в Среда выполнения Apps Script.
Пакеты
Пакет
Содержит
appsscript/base
общие помощники для остальных пакетов сервисов
appsscript/admin
сервис Admin SDK Directory
appsscript/sheet
Таблицы: строки, столбцы, нотация A1, GridRange, проверки типов
parseA1Notation превращает строку нотации в GridRange — простой объект с границами от нуля и невключённой правой границей, как в Sheets API, а не позициями от единицы, которые принимают методы Range:
В ходу две схемы нумерации, и имена функций говорят, какую именно они возвращают. Индекс считается от нуля, как в GridRange; позиция — от единицы, как в Sheet.getRange():
Они пишут за один вызов, а не построчно, — это разница между одним походом к сервису и походом на каждую строку. Все строки должны быть одной длины; проверить это заранее помогает isConsistent2DArray из lang.
Проверки типов для объектов сервисов
То же соглашение, что и во всей библиотеке, применённое к классам Apps Script:
import { isSheet, isSpreadsheet, isRange, requireSheet } from "apps-script-utils";
function rowCount(value: unknown): number {
return requireSheet(value).getLastRow();
}
requireSheet, requireSpreadsheet и requireRange бросают InvalidSheetException, InvalidSpreadsheetException и InvalidRangeException соответственно — смотрите Обработка исключений.
Презентации
import { getSlideByIndex, findReplaceAllTextInSlide, requireSlide } from "apps-script-utils";
const presentation = SlidesApp.getActivePresentation();
// getSlideByIndex возвращает null, если индекс за пределами, поэтому его
// сочетают с requireSlide там, где отсутствие слайда должно остановить скрипт.
const slide = requireSlide(getSlideByIndex(presentation, 0));
findReplaceAllTextInSlide(slide, "{{name}}", "Ada Lovelace");
findReplaceAllTextInSlide возвращает число сделанных замен и по умолчанию учитывает регистр; передайте false четвёртым аргументом для поиска без учёта регистра. requireSlide бросает SlideNotFoundException, если значение не является слайдом.
Admin SDK
import { isAdmin } from "apps-script-utils";
if (isAdmin()) {
Logger.log("Access granted to admin panel.");
}
isAdmin возвращает false, если сервис Admin SDK Directory не включён в проекте, записывая причину в журнал, а не бросая исключение. Вызов поэтому безопасен даже при построении меню, но false сам по себе ещё не доказывает, что пользователь не администратор. Включите расширенный сервис, прежде чем полагаться на ответ.