Если парсинг через Excel / VBA — это «настольный» путь, где данные тянутся скриптом прямо в книгу, то Google Sheets предлагает кое-что, чего у Excel из коробки нет: встроенные формулы-парсеры. Здесь во многих случаях не нужно писать ни строчки кода — достаточно вставить функцию в ячейку, и таблица сама загрузит данные с сайта и будет их обновлять.
А когда формул не хватает, на помощь приходит Google Apps Script — облачный аналог VBA на языке JavaScript. Он умеет делать HTTP-запросы, разбирать JSON и работать по расписанию, причём всё это крутится на серверах Google, а не на вашем компьютере.
В этой статье разберём оба уровня: сначала формулы для быстрого парсинга без кода, потом Apps Script для сложных задач.
Чем Google Sheets отличается от Excel / VBA
Сравнение помогает выбрать инструмент под задачу:
| Критерий | Excel / VBA | Google Sheets |
|---|---|---|
| Парсинг формулой без кода | Только Power Query | IMPORTXML, IMPORTHTML и др. |
| Язык скриптов | VBA | Apps Script (JavaScript) |
| Где выполняется | На вашем ПК | В облаке Google |
| Запуск по расписанию | Планировщик Windows + макрос | Триггеры из коробки |
| Совместная работа | Через файл | Реальное время, ссылка |
| Готовые финансовые данные | Нет | GOOGLEFINANCE встроена |
| Лимиты на запросы | Практически нет | Есть квоты Google |
Главный вывод: для лёгкого и среднего парсинга Google Sheets часто быстрее, потому что половина задач решается одной формулой. Для тяжёлых и нестандартных сценариев логика та же, что и в VBA, — меняется лишь синтаксис.
Уровень 1. Парсинг формулами
IMPORTHTML — таблицы и списки
Самая простая функция. Вытаскивает таблицу или список целиком по номеру:
=IMPORTHTML("https://example.com/page"; "table"; 1)
Аргументы: URL, тип элемента ("table" или "list") и его порядковый номер на странице. Если на странице несколько таблиц, перебирайте индекс (1, 2, 3...), пока не найдёте нужную. Результат «выливается» на соседние ячейки автоматически.
IMPORTXML — точечное извлечение по XPath
Самый мощный из формульных инструментов. Принимает URL и XPath-запрос — выражение, которое адресует конкретный элемент в разметке:
=IMPORTXML("https://example.com"; "//h1")
=IMPORTXML("https://example.com"; "//div[@class='price']")
=IMPORTXML("https://example.com"; "//span[@id='total']/text()")
Несколько полезных XPath-шаблонов:
| Задача | XPath |
|---|---|
| Все заголовки h2 | //h2 |
| Элемент по классу | //div[@class='value'] |
| Элемент по id | //*[@id='price'] |
| Атрибут (например, ссылку) | //a/@href |
| Текст внутри тега | //span[@class='cur']/text() |
| N-й элемент списка | (//li)[3] |
XPath проще всего подсмотреть в браузере: открыть «Инструменты разработчика» (F12), найти нужный элемент, правый клик → Copy → Copy XPath.
IMPORTDATA — CSV и TSV
Если источник отдаёт готовый CSV- или TSV-файл, тянем его напрямую:
=IMPORTDATA("https://example.com/data.csv")
Функция сама разложит значения по столбцам. Идеально для открытых датасетов и выгрузок.
IMPORTFEED — RSS и Atom
Для лент новостей и блогов:
=IMPORTFEED("https://example.com/rss")
GOOGLEFINANCE — финансы без парсинга вообще
Отдельно стоит выделить GOOGLEFINANCE — встроенный источник биржевых и валютных данных. Это тот случай, когда парсить ничего не надо: Google уже всё собрал за вас.
=GOOGLEFINANCE("NASDAQ:AAPL"; "price")
=GOOGLEFINANCE("CURRENCY:USDEUR")
=GOOGLEFINANCE("NASDAQ:GOOGL"; "price"; DATE(2024;1;1); DATE(2024;12;31); "DAILY")
Первый пример — текущая цена акции, второй — курс пары валют, третий — исторические котировки за период. Если ваша задача укладывается в то, что покрывает GOOGLEFINANCE, это самый надёжный путь: никаких блокировок и битой вёрстки. Парсинг сторонних сайтов нужен лишь там, где этих данных нет или нужен нестандартный источник.
Уровень 2. Google Apps Script
Формулы хороши, но у них есть потолок: они не умеют авторизоваться, обходить сложную защиту, разбирать вложенный JSON из API и выполнять ветвящуюся логику. Здесь начинается Apps Script.
Откройте таблицу → Расширения → Apps Script — и попадёте в облачный редактор кода. Это прямой аналог редактора VBA из материала про Excel, только на JavaScript.
HTTP-запрос: UrlFetchApp
Базовый запрос к странице или API:
function getResponse(url) {
const options = {
method: 'get',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
},
muteHttpExceptions: true // не падаем на кодах 4xx/5xx
};
const response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() === 200) {
return response.getContentText();
}
return 'ERROR: ' + response.getResponseCode();
}
Сравните с функцией GetResponse из статьи про VBA — логика идентична: открыли запрос, подставили User-Agent, проверили код ответа. Меняется только обёртка: вместо MSXML2.XMLHTTP здесь UrlFetchApp.
Разбор JSON — нативно
Главное преимущество Apps Script над VBA: JSON разбирается одной встроенной командой, без самописных функций и сторонних модулей.
function getPrice(symbol) {
const url = 'https://example-api.com/quote?symbol=' + symbol;
const json = getResponse(url);
const data = JSON.parse(json); // одна строка вместо ExtractJsonValue
return data.price;
}
В VBA для того же приходилось писать разбор строки вручную или подключать VBA-JSON. Здесь — JSON.parse, и сразу работаешь с объектом.
Запись результата на лист
Записываем данные в ячейки через объект листа:
function writeQuotes() {
const tickers = ['AAPL', 'MSFT', 'GOOGL', 'TSLA'];
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Заголовки
sheet.getRange(1, 1, 1, 3).setValues([['Тикер', 'Цена', 'Время']]);
const rows = [];
const now = new Date();
tickers.forEach(function (ticker) {
const price = getPrice(ticker);
rows.push([ticker, price, now]);
Utilities.sleep(1000); // пауза 1 сек между запросами
});
// Выгружаем всё одним вызовом — так быстрее
sheet.getRange(2, 1, rows.length, 3).setValues(rows);
}
Принцип «собрать в массив и выгрузить одним вызовом» здесь так же важен для скорости, как и в VBA: setValues на весь диапазон работает в разы быстрее, чем запись по одной ячейке в цикле.
Парсинг HTML в Apps Script
Со встроенным разбором HTML сложнее: полноценного DOM-парсера, как HTMLDocument в VBA, в Apps Script нет. На практике используют либо регулярные выражения, либо извлечение текста между маркерами:
function extractByRegex(text, pattern) {
const re = new RegExp(pattern);
const match = text.match(re);
return match ? match[1] : '';
}
// Пример: достать цену из "<span class='price'>152.34</span>"
// const price = extractByRegex(html, "class='price'>([\\d.]+)<");
Для сложной разметки иногда подключают сторонние библиотеки (например, Cheerio через сервис обёрток), но в большинстве задач регулярки или XPath-формула IMPORTXML справляются.
Кастомная функция для ячейки
Apps Script позволяет сделать собственную формулу, которую можно вызывать прямо из таблицы, как встроенную:
/**
* Возвращает цену по тикеру.
* @customfunction
*/
function MYPRICE(symbol) {
return getPrice(symbol);
}
После сохранения в ячейке заработает =MYPRICE("AAPL"). У VBA есть похожая возможность через UDF, но здесь функция доступна сразу всем, у кого есть доступ к таблице.
Автообновление по расписанию
В VBA для регулярного запуска нужен внешний планировщик Windows. В Google Sheets расписание встроено — это триггеры.
В редакторе Apps Script: иконка часов (Триггеры) → Добавить триггер → выбрать функцию, событие «По времени» и интервал (каждый час, каждый день и т. д.).
Или программно:
function setupTrigger() {
ScriptApp.newTrigger('writeQuotes')
.timeBased()
.everyHours(1)
.create();
}
Скрипт будет выполняться на серверах Google, даже когда ваш компьютер выключен и таблица закрыта. Для VBA-парсера такое недостижимо без постоянно работающей машины.
Лимиты и подводные камни
У облачного подхода своя цена — квоты Google:
- Формулы
IMPORT...обновляются периодически (примерно раз в час) и кэшируются. Для секундной актуальности они не годятся. UrlFetchAppимеет суточный лимит вызовов (зависит от типа аккаунта — обычно тысячи запросов в день для бесплатного).- Время выполнения скрипта ограничено (порядка 6 минут на запуск для бесплатных аккаунтов). Длинный парсинг придётся разбивать на части.
#N/AиLoading...в формулах часто означают, что источник не отдал данные, сменил вёрстку или заблокировал запрос с серверов Google.
Эти ограничения — главная причина, по которой тяжёлый и частый парсинг иногда возвращают на «настольный» рельс из материала про Excel / VBA, где лимитов по запросам по сути нет.
Что выбрать: Sheets или Excel / VBA
Короткая шпаргалка:
- Нужно быстро и без кода, данные в таблице, командная работа → Google Sheets и формулы.
- Биржевые курсы и котировки → сначала
GOOGLEFINANCE, и только если её мало — парсинг. - Автообновление без включённого ПК → Google Sheets с триггерами.
- Большой объём, частые запросы, нет лимитов, сложный разбор HTML → Excel / VBA.
- Корпоративная среда без облака, локальные данные → Excel / VBA.
Итог
Google Sheets закрывает два уровня парсинга одним инструментом. Формулы IMPORTHTML, IMPORTXML, IMPORTDATA и GOOGLEFINANCE решают типовые задачи без единой строки кода, а Apps Script с UrlFetchApp и нативным JSON.parse берёт на себя всё сложное — и делает это в облаке, по расписанию, без вашего компьютера.
По сравнению с подходом из материала про Excel / VBA логика остаётся той же — запрос, разбор, запись, обработка ошибок, — но синтаксис проще, JSON разбирается «из коробки», а автоматизация не требует внешнего планировщика. Платой за удобство становятся квоты Google: когда упираетесь в них, имеет смысл вернуться к настольному VBA-решению. Два инструмента не конкуренты, а дополняют друг друга — выбирайте под конкретную задачу.