Google Apps Script: Как реализовать выбор файлов?

Что такое Google Apps Script и его возможности

Google Apps Script — это облачная платформа сценариев, позволяющая автоматизировать задачи и расширять функциональность Google Workspace (Sheets, Docs, Forms, Drive и т. д.). С помощью Apps Script можно создавать пользовательские функции, триггеры, меню и диалоговые окна, а также интегрироваться с другими веб-сервисами.

Зачем необходимо выбирать файлы в Google Apps Script

Выбор файлов необходим во многих сценариях, например:

Импорт данных: загрузка данных из файлов (CSV, Excel) в Google Sheets.

Обработка документов: выбор шаблона для создания новых документов в Google Docs.

Работа с медиафайлами: загрузка изображений или видео в Google Drive.

Автоматизация маркетинговых задач: Выбор целевой аудитории для контекстной рекламы на основе данных из файлов.

Обзор доступных методов и API для выбора файлов

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

File Picker API: Предоставляет стандартизированный интерфейс для выбора файлов из Google Drive. Это рекомендуемый способ, но требует настройки Google Cloud Project.

Drive API: Позволяет программно искать и выбирать файлы в Google Drive. Более гибкий, но требует больше кода.

HTML Service: Создание пользовательского интерфейса выбора файлов с использованием HTML, CSS и JavaScript. Подходит для сложных сценариев.

Использование File Picker API для выбора файлов

Настройка и активация File Picker API в Google Cloud Project

Прежде чем использовать File Picker API, необходимо его активировать в вашем Google Cloud Project:

Откройте Google Cloud Console.

Выберите или создайте проект.

Включите File Picker API.

Создайте учетные данные (OAuth 2.0 client ID) для веб-приложения.

Реализация интерфейса выбора файлов с использованием HTML Service

Для отображения интерфейса выбора файлов используйте HTML Service. Необходимо создать HTML-страницу, которая вызывает File Picker API.

Обработка выбранных файлов и получение их метаданных (ID, Name, Size)

После выбора файла, API возвращает объект с информацией о выбранном файле. Важно получить ID файла для дальнейшей работы с ним через Drive API.

Пример кода: Простой выбор файла и вывод информации о нем

/**
 * @OnlyCurrentDoc
 */

/**
 * Отображает диалог выбора файла.
 */
function showFilePicker() {
  const html = HtmlService.createHtmlOutputFromFile('filePicker')
      .setWidth(600)
      .setHeight(450);
  SpreadsheetApp.getUi()
      .showModalDialog(html, 'Выберите файл');
}

/**
 * Функция, вызываемая из HTML для запуска File Picker API.
 * @return {string} ID файла.
 */
function openFilePicker() {
  const clientId = 'YOUR_CLIENT_ID'; // Замените на ваш Client ID
  const appId = 'YOUR_APP_ID'; // Замените на ваш App ID

  const picker = new google.picker.PickerBuilder()
      .addView(new google.picker.DocsView())
      .setOAuthToken(ScriptApp.getOAuthToken())
      .setDeveloperKey(appId)
      .setCallback(pickerCallback)
      .build();
  picker.setVisible(true);

  return;
}

/**
 * Callback-функция для File Picker API.
 * @param {Object} data Объект с информацией о выбранном файле.
 */
function pickerCallback(data) {
  let fileId = '';
  if (data[google.picker.Response.ACTION] == google.picker.Action.PICKED) {
    const doc = data[google.picker.Response.DOCUMENTS][0];
    fileId = doc[google.picker.Document.ID];

    const file = DriveApp.getFileById(fileId);
    const fileName = file.getName();
    const fileSize = file.getSize();

    Logger.log('Выбран файл: ' + fileName + ', ID: ' + fileId + ', Размер: ' + fileSize + ' bytes');

    // Здесь можно добавить код для дальнейшей обработки файла
    SpreadsheetApp.getActiveSpreadsheet().toast('Выбран файл: ' + fileName);
  }
}

/**
 * Функция для создания меню.
 */
function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('Выбор файла')
      .addItem('Открыть File Picker', 'showFilePicker')
      .addToUi();
}
Реклама

filePicker.html:




  
  
  
  
  
    // Load the Google Picker API.
    google.load('picker', '1', {
      callback: function() {
        google.setOnLoadCallback(createPicker);
      }
    });

    function createPicker() {
      google.script.run
          .withSuccessHandler(function(fileId) {
            console.log('File ID:', fileId);
          })
          .openFilePicker();
    }
  


  Выбор файла...

Не забудьте заменить YOUR_CLIENT_ID и YOUR_APP_ID на ваши реальные значения.

Интеграция выбора файлов в Google Sheets и Docs

Создание пользовательского меню в Google Sheets/Docs для запуска выбора файлов

Функция onOpen() создает пользовательское меню, которое позволяет запустить диалог выбора файлов непосредственно из интерфейса Google Sheets или Docs.

Получение списка выбранных файлов и запись информации в таблицу Google Sheets

После выбора файла можно получить его ID, имя, размер и другие метаданные, а затем записать эту информацию в таблицу Google Sheets.

Пример: Автоматическая вставка ссылок на выбранные файлы в Google Doc

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

Альтернативные методы и обходные пути

Использование Drive API для поиска и выбора файлов (если File Picker API недоступен)

Если File Picker API недоступен (например, из-за ограничений Google Cloud Project), можно использовать Drive API для поиска и выбора файлов. Это требует больше кода, но предоставляет большую гибкость.

/**
 * Ищет файлы в Google Drive по имени.
 * @param {string} fileName Имя файла для поиска.
 * @return {Array} Список найденных файлов.
 */
function findFilesByName(fileName) {
  const files = DriveApp.searchFiles('title contains ".' + fileName + '."');
  const result = [];
  while (files.hasNext()) {
    const file = files.next();
    result.push(file);
  }
  return result;
}

Реализация простого диалога выбора файлов с использованием Sidebar или Modal Dialog

С помощью HTML Service можно создать собственный диалог выбора файлов, который отображается в Sidebar или Modal Dialog. Это позволяет создать более кастомизированный интерфейс.

Ограничения и лучшие практики при работе с выбором файлов

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

Обработка ошибок: Предусмотрите обработку ошибок, например, если пользователь не выбрал файл или файл не существует.

Производительность: Оптимизируйте код для работы с большим количеством файлов.

Безопасность: Защитите ваши учетные данные (Client ID, App ID).

Заключение

Обзор рассмотренных методов выбора файлов

Мы рассмотрели три основных способа реализации выбора файлов в Google Apps Script: File Picker API, Drive API и HTML Service. Каждый метод имеет свои преимущества и недостатки, и выбор зависит от конкретной задачи.

Советы по оптимизации и улучшению пользовательского опыта

Используйте File Picker API, если это возможно, так как он предоставляет стандартизированный и удобный интерфейс.

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

Оптимизируйте код для работы с большим количеством файлов.

Дополнительные ресурсы и документация по Google Apps Script и File Picker API

Google Apps Script Documentation

File Picker API Documentation

Drive API Documentation


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