Робота з прайсами в Google Sheets: автоматизація через API
-
Галина Осторінкина
Копірайтер Elbuz
Google Sheets став популярним інструментом для керування прайс-листами завдяки хмарній природі та можливостям автоматизації. За допомогою Google Sheets API та Apps Script можна створити повноцінну систему керування цінами з автоматичною синхронізацією з вашим сайтом.
Переваги Google Sheets для прайсів
Google Sheets пропонує унікальні можливості для роботи з прайс-листами:
Хмарний доступ
Працюйте з прайсами з будь-якої точки світу без встановлення спеціального програмного забезпечення. Усі зміни зберігаються автоматично та доступні у реальному часі.
Безкоштовний API
Google Sheets API надається безкоштовно з лімітом 300 запитів на хвилину на проект, що достатньо для більшості малих та середніх бізнесів.
Apps Script
Вбудоване середовище розробки дозволяє створювати скрипти для автоматизації без додаткових серверів. Код виконується на стороні Google.
Інтеграція
Підключайте сотні сервісів через Zapier, Make (Integromat) чи створюйте власні інтеграції через API.
Google Sheets API: підключення
Для початку роботи з API необхідно виконати кілька кроків:
Крок 1: Створення проекту в Google Cloud Console
- Перейдіть на console.cloud.google.com
- Створіть новий проект або виберіть існуючий
- Увімкніть Google Sheets API у розділі "APIs & Services"
- Створіть облікові дані (OAuth 2.0 або Service Account)
Крок 2: Встановлення клієнтської бібліотеки
Для Python:
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlibПриклад читання даних із таблиці (Python)
from google.oauth2 import service_account from googleapiclient.discovery import build # Авторизація через Service Account SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly'] SERVICE_ACCOUNT_FILE = 'credentials.json' creden service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES) service = build('sheets', 'v4', credentials=credentials) # ID таблиці з URL SPREADSHEET_ID = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms' RANGE_NAME = 'Прайс!A2:E' # Читання даних sheet = service.spreadsheets() result = sheet.values().get(spreadsheet range=RANGE_NAME).execute() values = result.get('values', []) if not values: print('Дані не знайдені') else: for row in values: # Обробка кожного рядка прайсу product_code = row[0] print(f'{product_code}: {product_name} - {price} руб. ({stock} шт.)')Приклад запису даних (Python)
# Для запису використовуйте scopes з правами на редагування SCOPES = ['https://www.googleapis.com/auth/spreadsheets'] # Підготовка даних values = [ ['SKU123', 'Товар 1', 1500, 100], ['SKU124'2, '0' ['SKU125', 'Товар 3', 3500, 25] ] body ={ 'values': values } # Запис даних result = service.spreadsheets().values().update( spreadsheetId=SPREADSHEET_ID, range='Прайс!A2:D4', valueInputOption='RAW', body=body).execute() print(f'{result.get("up)Apps Script для автоматизації
Google Apps Script – це JavaScript-платформа, вбудована в Google Sheets, яка дозволяє автоматизувати завдання без зовнішніх серверів.
Автоматичне оновлення цін за розкладом
function updatePricesFromAPI() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Прайс'); // URL вашого API з прайсами var url = 'https://api.example.com/prices'; try { var response = UrlFetchApp.fetch(url, { 'method': 'get', 'headers':{ 'Authorization': 'Bearer YOUR_API_TOKEN' } }); var data = JSON.parse(response.getContentText()); // Очищення старих даних (починаючи з 2-го рядка) var lastRow = sheet.getLastRow(); if (lastRow > 1) { sheet.getRange(2, 1, lastRow - 1, sheet.getLastColumn()).clearContent(); } // Запис нових даних var row = 2; data.products.forEach(function(product) { sheet.getRange(row, 1).setValue(product.sku); sheet.getRange(row, 2).setValue(product.name); sheet.getRange(row, 3).setValue(product.price); 4).setValue(product.stock); sheet.getRange(row, 5).setValue(new Date()); Logger.log('Прайс успішно оновлено: '+ (row - 2) + 'товарів'); } catch (e){ Logger.log('Ошибка обновления: ' + e.toString()); // Отправка уведомления на email MailApp.sendEmail( 'manager@example.com', 'Ошибка обновления прайса', 'Не удалось обновить прайс. Ошибка: ' + e.toString() ); } } // Функція для налаштування тригера function setupTrigger() { // Видаляємо старі тригери var triggers = ScriptApp.getProjectTriggers(); triggers.forEach(function(trigger) { if (trigger.getHandlerFunction() === 'updatePricesFromAPI') { ScriptApp.deleteTrigger(trigger); } }); // Створюємо новий тригер (кожну годину) ScriptApp.newTrigger('updatePricesFromAPI').timeBased().everyHours(1).create(); }Валідація даних під час введення
function onEdit(e) { var sheet = e.source.getActiveSheet(); var range = e.range; // Перевіряємо тільки аркуш "Прайс" if (sheet.getName()!== 'Прайс') return; // Перевірка стовпця з цінами (стовпець 3) if (range.getColumn() === 3) { var value = range.getValue(); // Перевірка на число if(isNaN(value) || value< 0) { SpreadsheetApp.getUi().alert('Ошибка: цена должна быть положительным числом'); range.setValue(''); // Очищаем неверное значение return; } // Автоматический расчет цены с наценкой var markup = 1.3; // 30% наценка var retailPrice = value * markup; sheet.getRange(range.getRow(), 6).setValue(retailPrice.toFixed(2)); } // Проверка столбца с остатками (столбец 4) if (range.getColumn() === 4) { var stock = range.getValue(); if (isNaN(stock) || stock < 0 || stock % 1!== 0) { SpreadsheetApp.getUi().alert('Ошибка: остаток должен быть целым положительным числом'); range.setValue(''); return; } // Цветовая индикация остатков if (stock === 0) { range.setBackground('#ffcccc'); // Красный - нет на складе } else if (stock < 10) { range.setBackground('#fff3cd'); // Желтый - мало } else { range.setBackground('#d4edda'); // Зеленый - достаточно } } }Синхронізація із сайтом
Існує кілька способів синхронізації прайсів з Google Sheets із вашим сайтом:
Метод 1: Пряме читання через API (JavaScript)
// На фронтенді сайту async function loadPricesFromSheet() { const SHEET_ID = 'YOUR_SHEET_ID'; const API_KEY = 'YOUR_API_KEY'; const RANGE = 'Прайс! A2: E'; const url = `https://sheets.googleapis.com/v4/spreadsheets/${SHEET_ID}/values/${RANGE}?key=${API_KEY}`; try {const response = await fetch(url); const data = await response.json(); const products = data.values.map(row => ({ sku: row[0], name: row[1], price: parseFloat(row[2]), stock: parseInt(row[3]), updated: row[4] } )); displayProducts(products); } catch (error){ console.error('Ошибка загрузки прайса:', error); } } function displayProducts(products) { const container = document.getElementById('products-container'); products.forEach(product => { const productHTML = ` ${product.name}
Артикул: ${product.sku}
${product.price.toFixed(2)} руб.
В наявності: ${product.stock} шт.
`; container.innerHTML += productHTML; }); }Метод 2: Webhook із Apps Script
// Apps Script: надсилання даних на сайт при зміні function onEdit(e) { sendUpdateToWebsite(); } function sendUpdateToWebsite() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Прайс'); var data = sheet.getDataRange().getValues(); // Пропускаємо заголовок var products = []; for (var i = 1; i< data.length; i++) { products.push({ sku: data[i][0], name: data[i][1], price: data[i][2], stock: data[i][3] }); } var payload = { products: products, timestamp: new Date().toISOString() }; var options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload), headers: { 'X-API-Key': 'YOUR_WEBSITE_API_KEY' } }; try { var response = UrlFetchApp.fetch('https://your-website.com/api/update-prices', options); Logger.log('Данные отправлены: ' + response.getResponseCode()); } catch (e) { Logger.log('Ошибка отправки: ' + e.toString()); } }Метод 3: Експорт у CSV через Web App
// Apps Script: публікація CSV endpoint function doGet(e) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Прайс'); var data = sheet.getDataRange().getValues(); // Перевірка API ключа if (e.parameter.key!== 'YOUR_SECRET_KEY') { return ContentService.createTextOutput('Unauthorized').setMimeType(ContentService.MimeType.TEXT); } // Формування CSV var csv = ''; data.forEach(function(row) { csv += row.join(',') + '\n'; }); return ContentService.createTextOutput(csv).setMimeType(ContentService.MimeType.CSV).downloadAsFile('price_list.csv'); }Формули та валідація даних
Google Sheets пропонує потужні формули для автоматизації розрахунків у прайс-листах:
Корисні формули для прайсів
| Завдання | Формула | Опис |
|---|---|---|
| Націнка | = B2 * 1.3 | Розрахунок ціни з 30% націнкою |
| ПДВ | = B2 * 1.2 | Додавання ПДВ 20% |
| Знижка | =B2*(1-C2/100) | Застосування знижки зі стовпця C |
| Конвертація валюти | =B2*GOOGLEFINANCE("CURRENCY:USDEUR") | Автоматична конвертація за курсом |
| Умовне форматування | =IF(D2<10,"Мало","В наличии") | Статус щодо залишків |
| VLOOKUP для категорій | =VLOOKUP(A2,Категорії!A:B,2,FALSE) | Підтягування категорії за артикулом |
| Підсумкова вартість | = B2 * D2 | Ціна × кількість |
Налаштування валідації даних
Валідація допомагає запобігти помилкам при введенні даних:
- Діапазон чисел: Для цін встановіть мінімум 0, максимум можна не обмежувати
- Список значень: Для категорій, статусів, одиниць виміру
- Регулярні вирази: Для перевірки формату артикулів (наприклад, SKU-d{5})
- Користувальницька формула: Для складних умов (наприклад, =AND(B2>0, B2<1000000))
Умовне форматування для візуалізації
// Apps Script: налаштування умовного форматування function setupConditionalFormatting() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Прайс'); var range = sheet.getRange('D2:D1000'); // Стовпець із залишками var rules = sheet.getConditionalFormatRules(); // Червоний: залишок = 0 var rule1 = SpreadsheetApp.newConditionalFormatRule().whenNumberEqualTo(0).setBackground('#f4cccc').setRanges([range]).build(); // Жовтий: залишок< 10 var rule2 = SpreadsheetApp.newConditionalFormatRule().whenNumberLessThan(10).setBackground('#fff2cc').setRanges([range]).build(); // Зеленый: остаток > = 10 var rule3 = SpreadsheetApp.newConditionalFormatRule().whenNumberGreaterThanOrEqualTo(10).setBackground('#d9ead3').setRanges([range]).build(); rules.push(rule1, rule2, rule3); sheet.setConditionalFormatRules(rules); }Спільна робота команди
Google Sheets ідеально підходить для командної роботи з прайс-листами:
Рівні доступу
- Перегляд: Співробітники можуть лише читати дані
- Коментування: Можливість залишати коментарі без зміни даних
- Редагування: Повний доступ до зміни прайсу
- Захищені діапазони: Певні стовпці доступні лише власнику
Історія змін
Google Sheets автоматично відстежує всі зміни:
- Перегляд історії через Файл → Історія версій
- Відновлення попередніх версій
- Відстеження, хто та коли вніс зміни
Повідомлення про зміни
// Apps Script: повідомлення команди про зміни function notifyTeamOnPriceChange(e) { var sheet = e.source.getActiveSheet(); var range = e.range; // Відстежуємо тільки стовпець з цінами if (sheet.getName()!== 'Прайс' ||range.getColumn()!== 3) return; var row = range.getRow(); var sku = sheet.getRange(row, 1).getValue(); var productName = sheet.getRange(row, 2).getValue(); var oldPrice = e.oldValue; var newPrice = e.value; var user = e.user.getEmail(); var message = ` Зміна ціни в прайсі Товар: ${productName} (${sku}) Стара ціна: ${oldPrice} руб. Нова ціна: $ {newPrice} руб. Змінив: ${user} Час: ${new Date().toLocaleString('ru-RU')} `; // Відправлення в Telegram sendToTelegram(message); // Надсилання на email var recipients = 'sales@example.com, manager@example.com'; MailApp.sendEmail(recipients, 'Зміна ціни в прайсі', message); } function sendToTelegram(message) { var token = 'YOUR_BOT_TOKEN'; var chatId = 'YOUR_CHAT_ID'; var url = `https://api.telegram.org/bot${token}/sendMessage`; var payload ={ chat_id: chatId, text: message }; UrlFetchApp.fetch(url,{ method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) } ); }Коментарі та обговорення
Використовуйте вбудовану систему коментарів для обговорення спірних позицій:
- @згадування колег для привернення уваги
- Вирішення коментарів після усунення питання
- Призначення завдань через коментарі
Обмеження та альтернативи
Незважаючи на безліч переваг, Google Sheets має певні обмеження:
Технічні обмеження
| Параметр | Ліміт | Рішення |
|---|---|---|
| Максимум осередків | 10 млн осередків | Розділити на кілька файлів |
| Максимум рядків | Немає фіксованого ліміту | Обмежено загальним числом осередків |
| API запити | 300/хвилину на проект | Кешування, пакетні запити |
| Apps Script час | 6 хвилин (безкоштовно) | Оптимізація коду, розбивка на частини |
| Розмір файлу | Немає жорсткого ліміту | Продуктивність знижується після 100k рядків |
Коли варто розглянути альтернативу
- Понад 50 000 товарів: Розгляньте бази даних (PostgreSQL, MySQL) чи спеціалізовані системи
- Висока частота оновлень: Якщо прайс оновлюється частіше за раз на хвилину, краще використовувати БД
- Складна бізнес-логіка: Для багаторівневих націнок та складних розрахунків підійде ERP-система
- Критична швидкість: Google Sheets не підходить для real-time систем
Рекомендовані альтернативи
Airtable
Більш сильні здібності баз даних з інтуїтивним інтерфейсом. Найкраще підходить для складних зв'язків між таблицями.
Microsoft Excel Online
Альтернатива з інтеграцією до екосистеми Microsoft 365. Power Query для просунутої обробки даних.
Спеціалізовані PIM системи
Для великого бізнесу із тисячами SKU підійдуть Product Information Management системи.
Elbuz
Готове рішення для автоматизації роботи з прайсами, яке підтримує імпорт із Google Sheets та автоматичну синхронізацію з сайтом. Детальніше про автоматичну обробку прайсів.
Висновок
Google Sheets з API та Apps Script є потужним і доступним інструментом для управління прайс-листами. Основні переваги:
- Безкоштовність: Більшість функцій доступні без плати
- Простота застосування: Не потрібна складна інфраструктура
- Гнучкість: Можна адаптувати під будь-які бізнес-процеси
- Інтеграція: Легко підключити до сайту, CRM, 1C
- Командна робота: Зручна спільна робота з контролем доступу
Для малого та середнього бізнесу з каталогом до 10-20 тисяч товарів Google Sheets буде оптимальним рішенням. У разі зростання обсягів даних або ускладнення бізнес-логіки можна поступово мігрувати на більш просунуті платформи.
Пов'язані матеріали
Управління даними та синхронізація прайсів
Повний посібник з імпорту, експорту та синхронізації прайс-листів
Популярні формати прайс-листів
Огляд форматів CSV, XML, JSON, Excel для обміну даними
Автоматична синхронізація цін та залишків
Налаштування автооновлення даних на сайті з прайсів
ElbuzАвтоматична обробка прайсів
Готове рішення для автоматизації роботи з прайс-листами
Автоматизуйте роботу з прайсами
Використовуйте Google Sheets API для автоматичної синхронізації прайсів із вашим сайтом або спробуйте готове рішення Elbuz для повної автоматизації.
Збережи посилання на цю сторінку
Галина Осторінкина
Копірайтер ElbuzСекрети автоматизації інтернет-магазину розкриваються тут, наче сторінки чарівної книги успішного бізнесу. Ласкаво просимо до мого світу, де кожна ідея є ключем до ефективності онлайн!
Обговорення теми – Робота з прайсами в Google Sheets: автоматизація через API
Робота з прайсами в Google Sheets: автоматизація через API
Немає коментарів.


Написати коментар
Ваша адреса електронної пошти не буде опублікована. Обов'язкові поля відмічені *