API Google Sheets – jak połączyć arkusz z aplikacjami?

Marcin Kuśmierski
20 minut czytania

Google Sheets to nie tylko prosty arkusz kalkulacyjny, ale zaawansowana baza danych obsługiwana przez interfejsy programowania aplikacji, czyli API (Application Programming Interface). API Google Sheets umożliwia programistyczną interakcję z danymi, automatyzując procesy odczytu, zapisu i aktualizacji komórek w czasie rzeczywistym. Dzięki wykorzystaniu protokołów REST (Representational State Transfer), zewnętrzne systemy mogą przesyłać żądania HTTP, wymieniając dane w formacie JSON. Użytkownicy zyskują możliwość synchronizacji danych z systemami CRM (Customer Relationship Management), platformami e-commerce czy własnymi aplikacjami webowymi.

Contents
Najważniejsze wnioskiNa czym polega techniczna rola API w Google Sheets?Dlaczego autentykacja OAuth 2.0 jest konieczna do bezpiecznej integracji?Jakie są techniczne limity wykorzystania API Google Sheets?Jak przygotować środowisko programistyczne do pracy z arkuszami?Jakie operacje można wykonywać na danych w arkuszu?Jak zapewnić wysoką wydajność połączenia z arkuszem?Jak radzić sobie z błędami w komunikacji z API?Jak monitorować stan integracji w Google Cloud Console?Jak zabezpieczyć dane przed nieautoryzowanym dostępem?Jakie są różnice między Google Apps Script a zewnętrznym API?PodsumowanieNajczęściej zadawane pytania (FAQ)Czy do połączenia Google Sheets z zewnętrzną aplikacją wymagana jest znajomość języka programowania?Jak uzyskać dane uwierzytelniające do Google Sheets API w Google Cloud Console?Jakie są limity zapytań (quota) dla Google Sheets API?Jak bezpiecznie udostępnić arkusz aplikacji przez Google Sheets API?Czy Google Sheets API obsługuje zapisywanie danych w czasie rzeczywistym?Jaka jest różnica między użyciem Google Sheets API a Google Apps Script?Jak obsługiwać błędy typu „403 Permission Denied” podczas łączenia z arkuszem?Czy za pomocą Google Sheets API można formatować komórki, czy tylko przesyłać dane?Czy warto traktować Google Sheets jako bazę danych dla aplikacji produkcyjnej?Jak pobrać dane z arkusza w formacie JSON za pomocą API?Co to jest `spreadsheetId` i jak go znaleźć?Jak zabezpieczyć klucze API przed wyciekiem w kodzie źródłowym?Czy Google Sheets API wspiera obsługę wielu arkuszy wewnątrz jednego pliku?Jak zoptymalizować szybkość działania aplikacji korzystającej z Google Sheets API?Czy mogę użyć Google Sheets API do tworzenia automatycznych raportów w PDF?

Najważniejsze wnioski

  • API Google Sheets działa w architekturze REST, wykorzystując standardowe metody HTTP do operacji na danych.
  • Autentykacja odbywa się za pomocą protokołu OAuth 2.0, co zapewnia wysoki poziom bezpieczeństwa dostępu do arkuszy.
  • Format JSON jest standardem przesyłania danych między arkuszem a zewnętrznymi systemami aplikacyjnymi.
  • Limit szybkości transmisji (rate limits) wynosi standardowo 60 zapytań na minutę dla jednego użytkownika.
  • Integracja pozwala na tworzenie dynamicznych dashboardów aktualizowanych automatycznie przez zewnętrzne skrypty.
  • Użycie bibliotek klienckich Google przyspiesza implementację połączeń w popularnych językach jak Python czy JavaScript.
  • Monitorowanie zużycia limitów w Google Cloud Console chroni przed nieoczekiwanym przerwaniem działania usług.

Na czym polega techniczna rola API w Google Sheets?

Interfejs programowania aplikacji Google Sheets pełni funkcję pośrednika, który umożliwia zewnętrznym usługom komunikację z warstwą danych przechowywaną na serwerach Google. W przeciwieństwie do ręcznej edycji komórek, API pozwala na masowe przetwarzanie informacji za pomocą skryptów. Każdy arkusz posiada unikalny identyfikator Spreadsheet ID, który jest niezbędny do precyzyjnego kierowania zapytań do konkretnego pliku. Mechanizm ten eliminuje ryzyko błędów ludzkich podczas przenoszenia danych między systemami oraz pozwala na zachowanie spójności informacji.

Operacje realizowane przez API opierają się na modelu zasobów, gdzie arkusze, arkusze robocze (taby) oraz zakresy komórek są traktowane jako obiekty adresowalne. Przykładowo, pobranie danych odbywa się poprzez wysłanie żądania GET do odpowiedniego endpointu, co zwraca obiekt w notacji JSON (JavaScript Object Notation). Zapisywanie informacji realizowane jest poprzez metodę POST lub PUT, która aktualizuje stan konkretnych komórek zgodnie z przesłanym ładunkiem danych. Takie podejście gwarantuje, że każda modyfikacja jest rejestrowana i zgodna z architekturą chmurową Google.

Dlaczego autentykacja OAuth 2.0 jest konieczna do bezpiecznej integracji?

Protokół OAuth 2.0 (Open Authorization) to standard branżowy zapewniający autoryzowany dostęp do danych bez udostępniania bezpośrednich poświadczeń użytkownika. Dzięki niemu aplikacje mogą operować na arkuszach w imieniu użytkownika, dysponując tzw. Access Token (tokenem dostępu) o ograniczonym czasie ważności. Taki mechanizm znacząco zwiększa bezpieczeństwo, ponieważ w razie wycieku tokena, ograniczony jest zakres dostępu oraz czas jego aktywności. Proces ten eliminuje konieczność przesyłania hasła do konta Google w kodzie źródłowym aplikacji.

Konfiguracja autentykacji wymaga utworzenia projektu w Google Cloud Platform (GCP) oraz wygenerowania danych uwierzytelniających, takich jak Client ID oraz Client Secret. W środowiskach serwerowych często wykorzystuje się konta serwisowe (Service Accounts), które umożliwiają komunikację server-to-server bez udziału użytkownika przy każdym wywołaniu. Jest to rozwiązanie optymalne dla backendowych integracji wymagających ciągłej synchronizacji danych bez konieczności odnawiania autoryzacji w przeglądarce. Bezpieczeństwo jest dodatkowo wspierane przez Scope, czyli zakresy uprawnień, które definiują dokładnie, czy aplikacja może tylko czytać dane, czy również dokonywać w nich edycji.

Jakie są techniczne limity wykorzystania API Google Sheets?

Google Sheets API posiada zdefiniowane limity operacyjne, mające na celu ochronę stabilności infrastruktury chmurowej dostawcy. Standardowy limit wynosi 60 zapytań na minutę dla jednego użytkownika, co w praktyce oznacza konieczność optymalizacji częstotliwości wywołań. Przekroczenie tych wartości skutkuje otrzymaniem błędu HTTP 429 Too Many Requests, co sygnalizuje konieczność wdrożenia mechanizmów kolejkowania. Deweloperzy powinni stosować tzw. exponential backoff, czyli strategię stopniowego wydłużania odstępów między ponownymi próbami połączenia w przypadku błędu.

Warto zauważyć, że limity te dotyczą całego konta Google w kontekście projektów GCP, a nie tylko jednego arkusza. Planowanie wydajnej integracji wymaga zatem agregacji zmian w paczki (batching), co pozwala na aktualizację wielu komórek za pomocą jednego żądania HTTP. Takie podejście nie tylko minimalizuje liczbę wywołań, ale również redukuje opóźnienia wynikające z nawiązywania wielokrotnych sesji TLS Transport Layer Security. Skuteczne zarządzanie przepustowością jest fundamentalnym elementem skalowalnych rozwiązań opartych na Google Sheets.

Moim zdaniem, najskuteczniejszym sposobem na uniknięcie problemów z limitami API jest grupowanie operacji zapisu w jedną, zbiorczą transakcję zamiast wysyłania pojedynczych zapytań dla każdej komórki.

— Redakcja

Jak przygotować środowisko programistyczne do pracy z arkuszami?

Przygotowanie środowiska pracy rozpoczyna się od aktywacji Google Sheets API w konsoli Google Cloud oraz pobrania pliku credentials.json. Kolejnym etapem jest instalacja bibliotek klienckich w języku, w którym pisana jest aplikacja, na przykład google-api-python-client dla środowiska Python. Środowisko wirtualne (virtual environment) jest zalecane, aby uniknąć konfliktów zależności między różnymi projektami. Po przygotowaniu bibliotek należy przeprowadzić testowe połączenie, wykorzystując Spreadsheet ID udostępnionego arkusza, aby zweryfikować poprawność uprawnień.

Podczas tworzenia kodu istotne jest oddzielenie konfiguracji od logiki biznesowej, aby ułatwić zarządzanie poświadczeniami. Wykorzystanie zmiennych środowiskowych do przechowywania Service Account keys jest praktyką standardową, która podnosi bezpieczeństwo implementacji. Narzędzia takie jak Postman mogą posłużyć do wczesnej weryfikacji endpointów API, pozwalając na szybkie zrozumienie struktury odpowiedzi bez pisania pełnego kodu aplikacji. Solidne przygotowanie środowiska redukuje czas debugowania i pozwala na szybsze przejście do etapu implementacji funkcji biznesowych.

Jakie operacje można wykonywać na danych w arkuszu?

Możliwości API Google Sheets obejmują pełen zakres operacji CRUD (Create, Read, Update, Delete), co pozwala na kompleksowe zarządzanie bazą danych. Metoda values.get pozwala pobrać wartości z dowolnego zakresu, korzystając z notacji A1 lub R1C1, co daje elastyczność w adresowaniu danych. Metoda values.update służy do modyfikacji istniejących komórek, podczas gdy values.append pozwala na dopisywanie nowych rekordów na końcu arkusza, co jest przydatne w systemach logowania zdarzeń. Dodatkowo, zaawansowane metody pozwalają na zmianę formatowania, dodawanie wykresów czy zmianę nazw arkuszy roboczych.

Oto zestawienie podstawowych metod API dostępnych dla programistów:

Metoda HTTP Punkt końcowy (Endpoint) Opis operacji
GET values/get Pobiera dane z określonego zakresu komórek
POST values/append Dodaje nowe wiersze danych na końcu arkusza
PUT values/update Nadpisuje wartości w wybranym zakresie
DELETE batchUpdate Usuwa wiersze, kolumny lub formatowanie

Każda z wymienionych operacji wymaga precyzyjnego określenia parametrów żądania, takich jak valueInputOption. Ustawienie tej opcji na USER_ENTERED powoduje, że dane są interpretowane przez arkusz tak, jakby zostały wpisane przez człowieka, co umożliwia np. poprawne formatowanie dat. Wartości RAW natomiast przesyłają dane bez interpretacji, co jest szybsze i bardziej przewidywalne w systemach wymagających surowej obróbki matematycznej.

"Skuteczna automatyzacja z użyciem API Google Sheets polega na traktowaniu arkusza jako warstwy prezentacji, a nie jako głównej bazy danych. Architektura ta pozwala na elastyczne skalowanie systemu przy zachowaniu przejrzystości danych dla użytkownika końcowego." – Ekspert systemów rozproszonych.

Jak zapewnić wysoką wydajność połączenia z arkuszem?

API Google Sheets – jak połączyć arkusz z aplikacjami?

Wydajność integracji zależy bezpośrednio od minimalizacji liczby zapytań HTTP wysyłanych do serwerów Google. Zastosowanie batching (grupowania zapytań) pozwala na przesyłanie wielu operacji w jednym żądaniu, co drastycznie redukuje narzut sieciowy. Zamiast wysyłać 100 osobnych zapytań w celu aktualizacji 100 komórek, można stworzyć jedno żądanie typu batchUpdate, które przetworzy wszystkie zmiany naraz. Takie podejście skraca czas oczekiwania na odpowiedź latency i optymalizuje zużycie limitów API.

Innym aspektem wpływającym na wydajność jest stosowanie lokalnego buforowania danych. Jeśli aplikacja potrzebuje często odczytywać te same informacje, warto zapisać je w pamięci podręcznej (np. w Redis lub lokalnej zmiennej) i aktualizować tylko w przypadku wykrycia zmian w arkuszu. Wykorzystanie funkcji Google Apps Script do wstępnej obróbki danych bezpośrednio wewnątrz arkusza może również znacząco odciążyć zewnętrzną aplikację. Właściwa strategia optymalizacji połączenia jest istotna zwłaszcza w systemach o wysokim natężeniu ruchu, gdzie każda milisekunda ma znaczenie dla responsywności interfejsu.

Jak radzić sobie z błędami w komunikacji z API?

Obsługa błędów stanowi fundament stabilnej integracji, gdyż komunikacja przez sieć zawsze obarczona jest ryzykiem wystąpienia zdarzeń losowych. Najczęstsze problemy obejmują błędy 403 (brak uprawnień), 404 (nieprawidłowy identyfikator arkusza) oraz 500 (błędy serwera Google). Każda aplikacja powinna implementować zaawansowany system logowania, który rejestruje nie tylko kod błędu, ale również kontekst żądania. Dzięki temu możliwe jest szybkie zdiagnozowanie przyczyny problemu bez ręcznego przeglądania tysięcy wierszy logów.

W przypadku błędów przejściowych, takich jak 503 (Service Unavailable), nieodzowne jest zastosowanie strategii retry logic. Polega ona na ponownym wysłaniu żądania po upływie określonego czasu, stosując mechanizm jitter (losowe opóźnienie), aby uniknąć efektu thundering herd. Taka praktyka sprawia, że system staje się odporny na krótkotrwałe przerwy w działaniu usług chmurowych. Rzetelne podejście do obsługi błędów pozwala na tworzenie rozwiązań klasy korporacyjnej, które charakteryzują się wysoką dostępnością i niezawodnością nawet w zmiennych warunkach sieciowych.

Jak monitorować stan integracji w Google Cloud Console?

Konsola Google Cloud stanowi centralny punkt kontroli dla każdej integracji wykorzystującej API. Zakładka APIs & Services udostępnia szczegółowe wykresy monitorujące liczbę zapytań, opóźnienia odpowiedzi oraz wskaźniki błędów. Dzięki tym danym można na bieżąco obserwować, czy aplikacja zbliża się do limitów wydajnościowych, co pozwala na proaktywne skalowanie zasobów. Konfiguracja alertów w monitoringu pozwala na otrzymywanie powiadomień w czasie rzeczywistym, gdy wskaźnik błędów przekroczy dopuszczalny próg.

Oprócz monitoringu technicznego, warto również analizować koszty, jeśli integracja wykracza poza darmowy poziom użytkowania. Google Cloud pozwala na śledzenie wykorzystania zasobów i przypisywanie kosztów do konkretnych projektów, co jest użyteczne w większych organizacjach. Analiza logów w Cloud Logging umożliwia wgląd w treść wysyłanych zapytań, co bywa nieocenione podczas audytów bezpieczeństwa czy debugowania złożonych przypadków. Regularne przeglądanie paneli analitycznych to dobry nawyk pozwalający na utrzymanie integracji w optymalnej kondycji przez długi czas.

"Monitorowanie API to nie tylko kwestia techniczna, to dbanie o zaufanie użytkowników. Każda minuta przestoju w synchronizacji danych może oznaczać realne straty w procesach biznesowych opartych na arkuszach." – Specjalista Cloud Operations.

Jak zabezpieczyć dane przed nieautoryzowanym dostępem?

Bezpieczeństwo danych przetwarzanych przez API Google Sheets wymaga wielowarstwowego podejścia. Po pierwsze, należy stosować zasadę minimalnych uprawnień, udzielając aplikacji dostępu tylko do tych arkuszy, które są faktycznie niezbędne do wykonania zadania. Zamiast udostępniać całe konto Google, lepiej współdzielić tylko konkretne pliki z kontem serwisowym. Pozwala to na pełną kontrolę nad zakresem danych, które mogą zostać odczytane lub zmodyfikowane przez zewnętrzny kod.

Po drugie, regularna rotacja kluczy dostępowych (kont serwisowych) znacząco ogranicza ryzyko związane z ich ewentualnym przejęciem. Klucze nie powinny być nigdy współdzielone, przechowywane w repozytoriach kodu czy przesyłane otwartym tekstem. Najlepiej wykorzystywać menedżery sekretów, takie jak Google Secret Manager, które oferują bezpieczne przechowywanie i wersjonowanie haseł. Odpowiednie zarządzanie tożsamością i dostępem (IAM) jest niezbędnym elementem każdej profesjonalnej architektury, która traktuje poufność informacji jako priorytet.

Jakie są różnice między Google Apps Script a zewnętrznym API?

Google Apps Script to środowisko uruchomieniowe oparte na JavaScript, wbudowane bezpośrednio w ekosystem Google Workspace. Pozwala ono na tworzenie skryptów działających wewnątrz arkusza bez potrzeby konfigurowania serwerów zewnętrznych. Jest to idealne rozwiązanie dla prostych automatyzacji, takich jak wysyłanie e-maili po wypełnieniu komórki czy generowanie raportów PDF. Jednakże, w przypadku bardziej złożonych aplikacji webowych, zewnętrzne API okazuje się lepszym wyborem ze względu na większą kontrolę nad środowiskiem wykonawczym.

Zewnętrzne API daje możliwość wyboru technologii, użycia dowolnych bibliotek i łatwiejszej integracji z innymi systemami chmurowymi. Podczas gdy Apps Script jest ograniczony czasowo (limit 6-30 minut wykonania skryptu), zewnętrzny serwer może obsługiwać zadania długotrwałe. Wybór między tymi dwiema ścieżkami zależy od skali projektu, wymagań co do wydajności oraz dostępności zasobów inżynierskich. Wiele systemów wykorzystuje hybrydowe podejście, gdzie Apps Script realizuje proste akcje UI, a zewnętrzna aplikacja wykonuje ciężką obróbkę danych przez REST API.

Podsumowanie

Integracja z arkuszami Google poprzez API to zaawansowana metoda zwiększająca użyteczność standardowych tabel w profesjonalnych ekosystemach danych. Zrozumienie mechanizmów autentykacji OAuth 2.0, optymalizacja zapytań poprzez grupowanie danych oraz rygorystyczna obsługa błędów stanowią fundament stabilnych rozwiązań. Wykorzystanie konsoli Google Cloud pozwala na bieżące monitorowanie wydajności i bezpieczeństwa, co jest niezbędne w skalowalnych projektach. Odpowiednie zarządzanie dostępem i regularna rotacja kluczy gwarantują ochronę informacji przed niepożądanymi incydentami. Wybór między wbudowanym skryptowaniem a zewnętrznym API należy każdorazowo ocenić w kontekście potrzeb biznesowych oraz wymagań technicznych aplikacji. Dzięki tym praktykom, arkusz kalkulacyjny staje się dynamicznym ogniwem nowoczesnych procesów technologicznych.

Najczęściej zadawane pytania (FAQ)

Czy do połączenia Google Sheets z zewnętrzną aplikacją wymagana jest znajomość języka programowania?

Nie zawsze, ponieważ można wykorzystać platformy automatyzacji typu No-Code, takie jak Make (dawniej Integromat) lub Zapier, które oferują gotowe konektory API. Jeśli jednak potrzebujesz zaawansowanej integracji niestandardowej, niezbędna będzie znajomość bibliotek Google Apps Script (JavaScript) lub języka Python z wykorzystaniem biblioteki `gspread`.

Jak uzyskać dane uwierzytelniające do Google Sheets API w Google Cloud Console?

Musisz stworzyć projekt w Google Cloud Platform, włączyć usługę „Google Sheets API” i wygenerować klucz w zakładce „Credentials”. Dla integracji serwerowych najbezpieczniejszą metodą jest wykorzystanie konta serwisowego (Service Account) z plikiem JSON zawierającym klucz prywatny.

Jakie są limity zapytań (quota) dla Google Sheets API?

Standardowy limit to 60 żądań na minutę na użytkownika dla jednego projektu. Jeśli Twoja aplikacja przekracza te limity, należy zoptymalizować zapytania poprzez ich grupowanie (batching) lub złożyć wniosek w Google Cloud Console o zwiększenie przydziału (quota increase).

Jak bezpiecznie udostępnić arkusz aplikacji przez Google Sheets API?

Najbezpieczniejszą praktyką jest udostępnienie arkusza wyłącznie adresowi e-mail powiązanemu z kontem serwisowym (Service Account), które wygenerowałeś w Google Cloud. Dzięki temu nie musisz upubliczniać pliku w internecie, zachowując ścisłą kontrolę nad dostępem do danych.

Czy Google Sheets API obsługuje zapisywanie danych w czasie rzeczywistym?

Tak, API umożliwia operacje typu `append` (dopisanie wiersza) lub `update` (aktualizacja konkretnego zakresu komórek) niemal w czasie rzeczywistym. Warto jednak pamiętać o obsłudze ewentualnych opóźnień sieciowych oraz stosowaniu mechanizmu `batchUpdate` dla operacji seryjnych, co zwiększa wydajność zapisu.

Jaka jest różnica między użyciem Google Sheets API a Google Apps Script?

Google Apps Script to natywne środowisko skryptowe wewnątrz arkusza, które jest idealne do prostych automatyzacji wewnątrz ekosystemu Google bez dodatkowej infrastruktury serwerowej. Google Sheets API jest zewnętrznym interfejsem, który pozwala dowolnej aplikacji (np. Twojej stronie WWW lub CRM) na zdalne zarządzanie danymi w arkuszu.

Jak obsługiwać błędy typu „403 Permission Denied” podczas łączenia z arkuszem?

Błąd ten najczęściej wynika z braku uprawnień konta serwisowego do konkretnego pliku lub nieaktywnego API w konsoli. Upewnij się, że skopiowałeś adres e-mail konta serwisowego do ustawień udostępniania w arkuszu (z dostępem jako edytor) oraz że API jest poprawnie włączone w projekcie GCP.

Czy za pomocą Google Sheets API można formatować komórki, czy tylko przesyłać dane?

API pozwala nie tylko na operacje tekstowe, ale także na zaawansowane formatowanie komórek, takie jak zmiana tła, obramowania, formatu liczb czy dodawanie walidacji danych. Służy do tego metoda `batchUpdate` z obiektem `Request` zawierającym instrukcje `repeatCell` lub `addConditionalFormatRule`.

Czy warto traktować Google Sheets jako bazę danych dla aplikacji produkcyjnej?

Jako tymczasowe rozwiązanie lub dla małych projektów wewnętrznych – tak, jednak dla systemów o dużym natężeniu ruchu Google Sheets nie zastąpi relacyjnych baz danych typu PostgreSQL czy MySQL. Arkusz ma limity wydajnościowe oraz nie oferuje zaawansowanych mechanizmów transakcyjnych (ACID) wymaganych w profesjonalnym oprogramowaniu.

Jak pobrać dane z arkusza w formacie JSON za pomocą API?

Najprościej skorzystać z metody `spreadsheets.values.get`, która zwraca dane w formacie `values` (tablica tablic). Jeśli potrzebujesz bardziej złożonej struktury, musisz napisać logikę parsującą po stronie swojej aplikacji, która zamieni pierwszą linię (nagłówki) na klucze obiektów JSON.

Co to jest `spreadsheetId` i jak go znaleźć?

`spreadsheetId` to unikalny identyfikator Twojego arkusza, który znajduje się w pasku adresu przeglądarki między `/d/` a `/edit`. Jest to niezbędny parametr w każdym żądaniu API, aby serwery Google wiedziały, z którym konkretnie plikiem mają podjąć interakcję.

Jak zabezpieczyć klucze API przed wyciekiem w kodzie źródłowym?

Nigdy nie umieszczaj plików JSON z kluczami (Service Account) w publicznych repozytoriach typu GitHub. Używaj zmiennych środowiskowych (env variables) lub serwisów typu HashiCorp Vault, aby bezpiecznie zarządzać sekretami w Twoim środowisku produkcyjnym.

Czy Google Sheets API wspiera obsługę wielu arkuszy wewnątrz jednego pliku?

Tak, API operuje na nazwach zakładek (tabach). Możesz określić konkretny zakres danych poprzez notację `NazwaArkusza!A1:Z100`, co pozwala na precyzyjne pobieranie lub zapisywanie danych w konkretnym module Twojego pliku.

Jak zoptymalizować szybkość działania aplikacji korzystającej z Google Sheets API?

Kluczem jest minimalizacja liczby wywołań API poprzez agregowanie danych. Zamiast wysyłać pojedyncze żądania `update` dla każdego wiersza, korzystaj z metody `batchUpdate`, która pozwala wysłać kilkaset zmian w jednym zapytaniu sieciowym.

Czy mogę użyć Google Sheets API do tworzenia automatycznych raportów w PDF?

Tak, możesz za pomocą API pobierać dane do aplikacji, która następnie wygeneruje plik PDF przy użyciu bibliotek takich jak `jsPDF` lub `ReportLab`. Alternatywnie możesz użyć Apps Script do wywołania funkcji `DriveApp`, która wyeksportuje arkusz bezpośrednio do formatu PDF i zapisze go na Dysku Google.
Udostępnij artykuł
Brak komentarzy

Dodaj komentarz