Как скачать изображения из Google Sheets?

Вы когда-нибудь задумывались, а как скачать изображения из Google Sheets на комп? Или хотя бы выгрузить на Гугл Диск. Я задумывался. Нет такой возможности. Да-да, представьте себе, в Excel есть, а тут нет. Поэтому, поскольку я пишу много Google Apps скриптов, я подумал: «Напишу-ка ещё один, который закроет эту брешь». В итоге сделал расширение для Хрома Sheets Image Exporter.

Кстати, как-то меня озадачило отсутствие в Календаре Гугл возможности удалять события скопом. Серьёзно, вы до сих пор вынуждены тыкать в Удалить по одному. А если у вас куча евентов? Может, вы — евент-агентство или просто графики смен или отпусков составляете. Так вот, я тогда написал дополнение Good Events Planner, которое восполняло этот недостаток.

Впрочем, я не о нём, а о Sheets Image Exporter.

Легко сохраняйте изображения локально и экспортируйте их на Google Drive из Google Таблиц с помощью расширения Sheets Image Exporter для Chrome. Этот инструмент упрощает работу с изображениями, позволяя сохранять их на Google Диск или скачивать на устройство.

Основная инновация: механизм обнаружения изображений

Одной из главных трудностей при разработке Sheets Image Exporter было надежное определение изображений в Google Sheets, особенно различение выбранных и невыбранных изображений. Изначально я исследовал Google Sheets API, надеясь использовать метод getUrl() класса OverGridImage для получения данных изображений, но этот подход оказался проблемным.

Проблемы с Google Sheets API

Google Sheets API, несмотря на свои возможности, имеет значительные ограничения при работе с изображениями. Класс OverGridImage, представляющий изображения, плавающие над таблицей, не позволяет надежно различать изображения или определять, выбрано ли изображение пользователем. Метод getUrl(), предназначенный для получения URL изображения, и ранее был ненадежен, а недавно Google полностью сделал его непригодным для использования.

В документации Google Apps Script для OverGridImage метод getUrl() помечен, как устаревший:

Устарело.

Для большинства вновь вставленных изображений исходный URL недоступен.

Это создало проблему в программном доступе к данным изображений через API, что потребовало пересмотра подхода.

Решение на основе DOM

Столкнувшись с этими ограничениями, я обратился к объектной модели документа (DOM) браузера. Идея заключалась в том, чтобы обойти Google Sheets API и определять изображения напрямую в структуре DOM веб-страницы. Эксперименты показали, что изображения в Google Sheets представлены как элементы <img> с атрибутами src, начинающимися с blob:https://docs.google.com/ или filesystem:https://docs.google.com/. Это стало ключевым, позволив расширению обнаруживать изображения через запросы к DOM, а не полагаться на ненадежный API.

Для удобства и гибкости я реализовал механизм на основе CSS-селекторов для поиска изображений. Расширение использует селектор по умолчанию для определения изображений, выделенных пользователем мышью, используя специфическое CSS-свойство интерфейса Google Sheets. Выбранные изображения содержатся в элементах <div> с атрибутом style, включающим cursor: -webkit-grab. Это привело к определению селектора по умолчанию в popupImages.js:

const defaultSelector = 'div.waffle-borderless-embedded-object-overlay[style*="cursor: -webkit-grab"]';

Этот селектор нацелен на элементы <div> с классом waffle-borderless-embedded-object-overlay, имеющие стиль cursor: -webkit-grab, что соответствует изображениям, выделеннным пользователем мышью в интерфейсе Google Sheets.

Гибкость с пользовательскими селекторами

Предполагая, что пользователи могут захотеть настроить обнаружение изображений, я добавил возможность ввода пользовательского CSS-селектора через интерфейс всплывающего окна расширения. Это позволяет опытным пользователям нацеливаться на конкретные элементы в DOM. Например, чтобы получить все изображения (включая невыбранные), можно использовать селектор div.waffle-borderless-embedded-object-overlay[style*="cursor: default"], который нацелен на все, включая невыделенные, изображения.

Логика обработки селекторов, включая возврат к селектору по умолчанию при некорректном пользовательском селекторе, реализована в content.js:

try {
    selectedImageContainers = document.querySelectorAll(selector);
} catch (e) {
    console.warn(`Некорректный селектор: ${selector}, возврат к умолчанию: ${defaultSelector}`);
    selector = defaultSelector;
    selectedImageContainers = document.querySelectorAll(defaultSelector);
}

Этот код обеспечивает возврат к селектору по умолчанию при некорректном пользовательском селекторе, сохраняя функциональность и предоставляя обратную связь через консоль.

Обработка изображений в DOM

После обнаружения изображений расширение обрабатывает их, извлекая URL-адреса blob и преобразуя их в dataURL для дальнейшего использования (например, сохранения в Google Drive или локальной загрузки). Это реализовано в content.js:

const img = container.querySelector('img[src^="blob:https://docs.google.com/"], img[src^="filesystem:https://docs.google.com/"]');

if (img) {
    processImage(img, index, () => {
        completed++;
        if (completed === selectedImageContainers.length) {
            const filteredDataUrls = dataUrls.filter(url => url !== null);
            console.log(`Отправлено ${filteredDataUrls.length} уникальных изображений.`);
            sendResponse({ images: filteredDataUrls, selectorUsed: selector });
        }
    });
}

Этот фрагмент показывает, как расширение определяет элементы <img> с URL-адресами blob или filesystem, преобразует их в dataURL и отправляет результаты в скрипт всплывающего окна для отображения или экспорта.

Почему это важно

Механизм обнаружения изображений на основе DOM является сердцем Sheets Image Exporter. Отказ от Google Sheets API и использование DOM позволяет преодолеть ограничения устаревшего метода getUrl() и обеспечивает надежный способ определения и извлечения изображений. Селектор по умолчанию упрощает использование для большинства пользователей, а возможность пользовательского селектора добавляет гибкость для продвинутых сценариев. Этот подход не только решает техническую задачу, но и улучшает пользовательский опыт, делая извлечение изображений интуитивным и надежным.

Практическое применение

Расширение применимо в различных ситуациях:

  • Электронная коммерция: Извлечение изображений товаров из таблиц инвентаризации для использования на сайтах или маркетплейсах.
  • Образование: Получение визуальных активов из учебных материалов или студенческих проектов для отчётов или цифровых портфолио.
  • Управление проектами: Экспорт изображений, таких как логотипы или скриншоты, из таблиц для включения в отчёты или презентации.
  • Маркетинг: Доступ к визуальным материалам кампаний, например графике для социальных сетей или баннерам, прямо из таблицы.

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

Основные функции

  • Выбор изображений мышью: Выделяйте одно или несколько изображений в Google Таблицах с помощью мыши (удерживайте Ctrl или Shift для множественного выбора).
  • Быстрое удаление изображений: Удаляйте выбранные изображения из таблицы клавишей Delete после сохранения.
  • Настройки качества изображения: Выбирайте формат (PNG/JPEG) и уровень сжатия (для локального экспорта).
  • Сохранение на Google Диск: Загружайте изображения в указанную папку Google Диска.
  • Локальный экспорт: Скачивайте изображения в виде zip-архива на устройство в выбранном формате.
  • Настраиваемый CSS-селектор: Используйте собственный CSS-селектор для выбора изображений, с оптимизированным стандартным селектором.
  • Удобный интерфейс: Просматривайте и выбирайте изображения с помощью флажков.
  • Безопасная аутентификация: Использует OAuth 2.0 от Google для безопасного доступа к Google Диску.

Как использовать

  1. Откройте Google Таблицы с изображениями.
  2. Выделите изображения, удерживая Ctrl/Shift для множественного выбора.
  3. Нажмите на иконку расширения.
  4. Введите ID папки Google Диска (из URL: https://drive.google.com/drive/folders/FOLDER_ID) или оставьте пустым для локального скачивания.
  5. (Опционально) Настройте CSS-селектор или используйте стандартный. Например, если в селекторе заменить «cursor: -webkit-grab» на «cursor: default», то будут выбраны все изображения, а не только выделенные.
  6. (Опционально) Настройте степень сжатия (0.2 — 1.0) и выберите тип (JPG/PNG).
  7. Выберите изображения в списке и нажмите «Save to Drive» или «Download Locally».
  8. (Опционально) Удалите выделенные изображения клавишей Delete.
Как скачать изображения из Google Sheets с помощью Sheets Image Exporter

Системные требования

  • Учетная запись Google с доступом к Google Таблицам и Google Диску (для сохранения на Drive).
  • Браузер Google Chrome (рекомендуется последняя версия).
  • Подключение к интернету для работы с API (если используется Google Диск).

Конфиденциальность и безопасность

Мы уважаем вашу конфиденциальность. Расширение:

  • Собирает только данные, необходимые для работы (ID папки, CSS-селектор, временный OAuth-токен, изображения).
  • Не передает данные третьим лицам.
  • Соответствует политике пользовательских данных Google API.
  • Хранит настройки безопасно в хранилище Chrome и удаляет OAuth-токены после использования.

Подробности см. в Политике конфиденциальности для Sheets Image Exporter.

Теперь скачать изображения из Google Sheets легко и просто. Упростите управление изображениями в Google Таблицах!


Обновление

Сегодня, наконец, закинул всё необходимое для публикации этого расширения в Гугл Хром Стор, жду рассмотрения и одобрения.

Как только одобрят, так сразу закину сюда ссылку на расширение.

Обновление 2

Одобрили, вот ссылка: Sheets Image Exporter, пробуйте.

English


0 комментариев

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

Заполнитель аватара

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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