Что такое Google Apps Script и зачем он нужен?
Google Apps Script (GAS) – это облачный язык сценариев, основанный на JavaScript, который позволяет автоматизировать задачи и интегрировать различные сервисы Google, такие как Google Drive, Sheets, Docs и другие. Он предоставляет мощные инструменты для управления файлами, обработки данных и создания пользовательских веб-приложений. В контексте Google Drive, Apps Script незаменим для автоматизации рутинных операций, таких как организация файлов, резервное копирование и интеграция с другими сервисами.
Основные понятия: файлы, папки, идентификаторы (ID)
Для работы с файлами и папками в Google Apps Script необходимо понимать основные понятия:
Файл: Представляет собой конкретный файл в Google Drive (документ, таблица, изображение и т.д.).
Папка: Контейнер для организации файлов.
Идентификатор (ID): Уникальная строка, идентифицирующая файл или папку. Идентификаторы используются для доступа к конкретным файлам и папкам в скриптах. ID можно найти в URL файла или папки.
Обзор библиотеки Drive API в Google Apps Script
Google Apps Script предоставляет встроенную библиотеку DriveApp, которая обеспечивает доступ к Google Drive API. Эта библиотека позволяет выполнять различные операции с файлами и папками, включая создание, чтение, обновление, удаление и, конечно, перемещение.
Перемещение файла в другую папку: базовый пример
Получение доступа к файлу и целевой папке по ID
Прежде чем переместить файл, необходимо получить к нему доступ, а также к папке, в которую нужно переместить файл. Это делается с помощью идентификаторов файла и папки:
/**
* Функция для перемещения файла в другую папку.
*/
function moveFile(fileId: string, folderId: string): void {
// Получаем файл по ID.
const file: GoogleAppsScript.Drive.File = DriveApp.getFileById(fileId);
// Получаем папку по ID.
const folder: GoogleAppsScript.Drive.Folder = DriveApp.getFolderById(folderId);
// ... Дальнейший код для перемещения файла
}Метод `moveTo(folder)`: перемещение файла
После того, как файл и папка были получены, можно использовать метод moveTo(folder) для перемещения файла в указанную папку. Важно: файл сначала удаляется из текущей папки, а затем добавляется в новую.
/**
* Функция для перемещения файла в другую папку.
*/
function moveFile(fileId: string, folderId: string): void {
// Получаем файл по ID.
const file: GoogleAppsScript.Drive.File = DriveApp.getFileById(fileId);
// Получаем папку по ID.
const folder: GoogleAppsScript.Drive.Folder = DriveApp.getFolderById(folderId);
// Перемещаем файл в папку.
file.moveTo(folder);
console.log(`Файл с ID ${fileId} перемещен в папку с ID ${folderId}`);
}Обработка ошибок: что делать, если файл или папка не найдены
Важно предусмотреть обработку ошибок, если файл или папка с указанными ID не существуют. В противном случае, скрипт завершится с ошибкой.
/**
* Функция для перемещения файла в другую папку с обработкой ошибок.
*/
function moveFile(fileId: string, folderId: string): void {
try {
// Получаем файл по ID.
const file: GoogleAppsScript.Drive.File = DriveApp.getFileById(fileId);
// Получаем папку по ID.
const folder: GoogleAppsScript.Drive.Folder = DriveApp.getFolderById(folderId);
// Перемещаем файл в папку.
file.moveTo(folder);
console.log(`Файл с ID ${fileId} перемещен в папку с ID ${folderId}`);
} catch (e) {
console.error(`Ошибка при перемещении файла с ID ${fileId}: ${e}`);
}
}Расширенные сценарии перемещения файлов
Перемещение нескольких файлов одновременно
Для перемещения нескольких файлов можно использовать цикл for или forEach, чтобы итерировать по списку идентификаторов файлов и перемещать каждый файл в указанную папку.
/**
* Функция для перемещения нескольких файлов в одну папку.
*/
function moveFiles(fileIds: string[], folderId: string): void {
const folder: GoogleAppsScript.Drive.Folder = DriveApp.getFolderById(folderId);
fileIds.forEach(fileId => {
try {
const file: GoogleAppsScript.Drive.File = DriveApp.getFileById(fileId);
file.moveTo(folder);
console.log(`Файл с ID ${fileId} перемещен в папку с ID ${folderId}`);
} catch (e) {
console.error(`Ошибка при перемещении файла с ID ${fileId}: ${e}`);
}
});
}Перемещение файла на основе условий (например, по дате создания)
Можно перемещать файлы в зависимости от их даты создания или других свойств. Например, можно перемещать файлы, созданные более года назад, в архивную папку.
/**
* Функция для перемещения старых файлов в архив.
*/
function archiveOldFiles(ageInDays: number, archiveFolderId: string): void {
const archiveFolder: GoogleAppsScript.Drive.Folder = DriveApp.getFolderById(archiveFolderId);
const files: GoogleAppsScript.Drive.FileIterator = DriveApp.getFiles();
const cutoffDate: Date = new Date();
cutoffDate.setDate(cutoffDate.getDate() - ageInDays);
while (files.hasNext()) {
const file: GoogleAppsScript.Drive.File = files.next();
const creationDate: Date = file.getDateCreated();
if (creationDate < cutoffDate) {
file.moveTo(archiveFolder);
console.log(`Файл с ID ${file.getId()} перемещен в архив`);
}
}
}Перемещение файлов между разными аккаунтами Google Drive (с ограничениями)
Перемещение файлов между разными аккаунтами Google Drive напрямую через DriveApp невозможно. Вместо этого, необходимо использовать Service Account и Drive API. Альтернативный (и более простой) вариант – загрузить файл и создать копию в другом аккаунте, а затем удалить исходный файл.
Автоматизация перемещения файлов с помощью триггеров
Создание триггера на основе времени (например, перемещение файлов раз в день)
Триггеры позволяют автоматизировать выполнение скриптов по расписанию или при определенных событиях. Например, можно создать триггер, который будет запускать скрипт для перемещения старых файлов в архивную папку раз в день.
Создание триггера при создании нового файла (например, перемещение в папку ‘Архив’)
Можно создать триггер, который будет запускаться при создании нового файла в определенной папке и автоматически перемещать его в другую папку, например, в папку ‘Архив’.
Рекомендации по эффективному использованию триггеров
Ограничьте частоту запуска триггеров, чтобы избежать перегрузки системы.
Обрабатывайте ошибки и логируйте информацию для отладки.
Используйте конкретные идентификаторы файлов и папок, чтобы избежать случайного перемещения нежелательных файлов.
Практические примеры и советы
Пример скрипта для автоматической сортировки файлов по типу
Этот скрипт автоматически сортирует файлы в папке по типу (документы, таблицы, презентации и т.д.) и перемещает их в соответствующие папки.
Пример скрипта для перемещения старых файлов в архивную папку
Этот скрипт перемещает файлы, созданные более года назад, в архивную папку. Полезно для поддержания порядка в основном диске и экономии места.
Лучшие практики при работе с Drive API и Google Apps Script
Используйте типизацию для повышения надежности кода.
Добавляйте комментарии для документирования кода.
Обрабатывайте ошибки и логируйте информацию для отладки.
Ограничьте частоту вызовов API, чтобы избежать превышения лимитов.
Используйте пакетную обработку для повышения производительности при работе с большим количеством файлов.