Czym jest Google Apps Script?
Apps Script to usługa Google służąca do automatyzacji i integracji usług Google Workspace takich jak: Arkusze Google, Dokumenty Google, Google Analytics, YouTube, BigQuery czy Kalendarz Google. Usługa jest dostępna dla każdego kto ma konto Gmail.
Dzięki tej technologii w prosty sposób można zautomatyzować żmudne zadania, zwiększyć funkcjonalność Google Workspace oraz dostosować rozwiązania do własnych potrzeb.
Tworzenie automatyzacji w Apps Script polega na pisaniu prostych skryptów w języku programowania JavaScript, który jest wzbogacony o zestaw funkcji dostarczonych przez Google. To połączenie pozawala nam skupić się na rozwiązywaniu problemów bez kłopotania się w zaawansowane zagadnienia takie jak autoryzacja, sesja czy serwer.
Poniżej znajdziesz dalszą część artykułu która zajmie Ci około 3 minut
Jakie są zastosowania Apps Script?
Google Workspace
Rozszerzanie UI
Apps Scripts pozwala na dodawanie elementów do interfejsu użytkownika w aplikacjach Google. Na przykład możemy dodać nowe menu w Arkuszach Google, które będzie posiadało opcje takie jak: wysłanie klientowi oferty czy wygenerowanie podsumowania dla zaznaczonych komórek.
Gmail
Automatyczne wysyłanie maili
Kolejne zastosowanie to automatyczne wysyłanie maili. Możemy na przykład wysłać raport do zdefiniowanej grupy odbiorców lub informacje o promocji na podstawie listy mailingowej stworzonej w Arkuszach Google.
Dokładnie! Nie trzeba korzystać z żadnych zewnętrznych dostawców aby rozpocząć automatyczną wysyłkę maili, wystarczy twoje konto google.
Google Forms
Interaktywne formularze
Łącząc Apps Script z Formularzami Google możemy tworzyć nietypowe dynamiczne formularze, które dostosowują swoją treść na podstawie danych wprowadzanych przez respondentów.
O układzie formularza może decydować zarówno prosta logika jak i ChatGPT, który na podstawie analizy już wprowadzonych danych zdecyduje, czy zadać respondentowi dodatkowe pytania.
Możliwe jest również wysłanie wiadomość email z podsumowaniem do respondenta po wypełnieniu formularza oraz powiadomienie Cię o tym, że nowa osoba wypełniła formularz.
Google Docs
Przeszukiwanie dokumentów
Można stworzyć skrypt, który przeszuka dokumenty analizując słowa kluczowe, stworzy podsumowanie, czy automatycznie wygeneruje spis treści.
Google Sheets
Analiza danych w arkuszach kalkulacyjnych
Apps Scripts za pomocą prostych skryptów pozawala przekształcać i formatować duże zbiory danych. Na przykład możesz automatycznie wykonywać zaawansowane filtrowanie danych na podstawie określonych kryteriów, obliczyć statystyki, wygenerować raporty lub wykresy.
Można również pójść o krok dalej i prognozować trendy na podstawie danych integrując arkusz z modelami językowymi.
Teraz z grubej rury! Będziemy pisać skrypty 😉
zarezerwuj sobie 20 minut
A teraz pora na twój pierwszy projekt…
… ale zanim zaczniesz! w podanym przykładzie będę używał prostej składni języka JavaScript, jednakże nie będę jej tutaj omawiał ani tłumaczył ponieważ jest to zagadnienie godne osobnego kursu.
Przedstawiony przeze mnie skrypt można uruchomić bez wnikania co robią poszczególne instrukcje kodu jak const
czy function
. W tym artykule omawiam linia po linii działanie i logikę skryptu.
Na końcu tego artykułu znajduje się pełny skrypt, do którego sprawdzenia i wypróbowania zachęcam Cię czytelniku!
Do dzieła!
Aby zacząć prace z Apps Script należy utworzyć nowy arkusz Google (lub inną usługę google), a następnie przejść do menu Rozszerzenia
na górnym pasku nawigacyjnym i wybrać opcję Apps Script
W rezultacie w nowej karcie otworzy się projekt Apps Script. Tak utworzony skrypt zostanie automatycznie powiązany z naszym arkuszem. Kiedy projekt jest połączony z arkuszem, zamykanie arkusza lub odświeżanie strony spowoduje również zamknięcie zakładki z projektem Apps Script.
Następnie dodajmy trochę danych. Dla przykładu weźmy listę osób oraz ich wiek. Niestety wiek nie zawsze jest liczbą, ale poradzimy sobie z tym za pomocą skryptów! Poprawimy formatowanie wieku, a następnie policzymy ile lat minęło od osiągnięcia pełnoletności (W Polsce 18 lat) dla każdej osoby.
Kto | Wiek | Wiek (liczba) | Ile lat jest pełnoletni |
---|---|---|---|
Piotr | x24 | ||
Julia | 27 f | ||
Andrzej | 55 | ||
Magdalena | trzydzieści dwa (32) | ||
Michał | 29 | ||
Marcin | 30 | ||
Przemysław | 32 | ||
Anna | ma lat: 45 | ||
Barbara | 28 |
Przejdziemy teraz do projektu Apps Script. Będziemy pisać nasz kod wewnątrz funkcji myFunction()
. Podczas pisania kodu edytor automatycznie będzie podświetlał podpowiedzi.
Zaczniemy od pobrania danych
const arkusz = SpreadsheetApp.getActiveSheet();
const zakres = arkusz.getRange("A2:D10");
Funkcja SpreadsheetApp.getActiveSheet()
pobiera aktywny arkusz z powiązanego arkusza Google. Zaś funkcja getRange("A2:D10")
wybiera konkretny zakres komórek w tym arkuszu. Do wybrania arkusza używamy notacji A1, która jest zrozumiała dla ludzi. Notacja A1 polega na odwoływaniu się do wierszy i kolumn za pomocą litery kolumny i numeru wiersza.
Następnie tworzymy tablicę do przechowywanie wyników. Za pomocą pętli przetwarzamy wybrane wiersze i nadpisujemy wybrany zakres tymi wynikami. Prezentuje to następujący kod:
const wyniki = [];
for (let i = 1; i <= zakres.getNumRows(); i++) {
// Tutaj będziemy przetwarzać wyniki
}
zakres.setValues(wyniki);
Teraz wewnątrz pętli dla każdego wiersza wyciągniemy dane, które aktualnie mamy w arkuszu
const kto = zakres.getCell(i, 1).getValue(); // Imie w kolumnia Aconst wiek = zakres.getCell(i, 2).getValue(); // Wiek w kolumnie B
Zmienna i
jest tutaj argumentem pętli i w naszym przypadku dodatkowo określa ona numer wiersza nad którym pracujemy. Funkcja getCell(wiersz, kolumna)
znajduje wskazaną komórkę w wybranym przez nas zakresie, a funkcja getValue()
pobiera wartość z tej komórki.
Przekształćmy teraz wiek w poprawną liczbę:
let wiekLiczba;
// Sprawdzamy co nie jest liczbą
if (typeof wiek === "string") {
// i zmieniamy to na liczbę
wiekLiczba = parseInt(wiek.replace(/\D/g, ""));
} else {
// w przeciwnym razie przepisujemy wartość komórki bo juz jest liczbą
wiekLiczba = wiek;
}
Definiujemy zmienną wiekLiczba
która przechowa poprawiony wiek. Następnie sprawdzamy czy wartość w komórce z wiekiem jest ciągiem znaków if (typeof wiek === "string")
. Jeżeli jest ciągiem znaków to wyłuskujemy z tych znaków liczbę. Jeżeli nie jest uznajemy, że już jest poprawną liczbą i przepisujemy tę wartość.
Aby wyciągnąć liczbę z ciągu znaków używamy funkcji parseInt(wiek.replace(/\D/g, ""));
. Bez wchodzenia w detale opiszę co tu się dzieje: ta funkcja używając prostego wyrażenia regularnego zastąpi wszystkie nie-liczby brakiem znaku, więc je usunie. A następnie przekształci pozostałe znaki (znaki reprezentujące liczby) w faktyczną liczbę całkowitą.
Obliczmy jeszcze ile lat upłynęło od osiągnięcia pełnoletności za pomocą prostego odejmowania.
const wiekPo18 = wiekLiczba - 18;
Na koniec tworzymy tablicę reprezentującą nowy wiersz nowyWiersz
, z nowymi danymi. A następnie dodajemy ten nowy wiersz do wyników
Logger.log("kto: %s, wiek: %s, wiekLiczba: %s, wiekPo18 %s", kto, wiek, wiekLiczba, wiekPo18);
const nowyWiersz = [kto, wiek, wiekLiczba, wiekPo18]; // Tak będzie wyglądał nowy wiersz
wyniki.push(nowyWiersz); // Dodajemy nowy wiersz to wyników
Instrukcja Logger.log(...)
nie jest konieczna, ale bywa pomocna. W tym przypadku wypisze ona w dzienniku wykonywania podsumowanie każdego obiegu pętli.
Aby uruchomić skrypt należy kliknąć przycisk Uruchom
na górnej belce nad skryptem.
Może wyskoczyć okienko z pytaniem o uprawnienia. Należy potwierdzić, wybrać swoje konto google i zaakceptować zgody.
A tak wygląda wynik działania skryptu
Oto gotowy skrypt
function myFunction() {
// Pobiera aktywny arkusz
const arkusz = SpreadsheetApp.getActiveSheet();
// Wybiera zakres z którym będziemy pracować
const zakres = arkusz.getRange("A2:D10"); // Notacja A1
// Tablica przechowywania wyników
const wyniki = [];
// Przechodzimy pętlą po kolei po każdym wierszu w wybranym zakresie
for (let i = 1; i <= zakres.getNumRows(); i++) {
const kto = zakres.getCell(i, 1).getValue(); // Imie w kolumnia A
const wiek = zakres.getCell(i, 2).getValue(); // Wiek w kolumnie B
let wiekLiczba;
// Sprawdzamy co nie jest liczbą
if (typeof wiek === "string") {
// i zmieniamy to na liczbę
wiekLiczba = parseInt(wiek.replace(/\D/g, ""));
} else {
// w przeciwnym razie przepisujemy wartość komórki bo juz jest liczbą
wiekLiczba = wiek;
}
// Obliczamy lata po ukończeniu pełnoletnosci
const wiekPo18 = wiekLiczba - 18;
Logger.log("kto: %s, wiek: %s, wiekLiczba: %s, wiekPo18 %s", kto, wiek, wiekLiczba, wiekPo18);
const nowyWiersz = [kto, wiek, wiekLiczba, wiekPo18]; // Tak będzie wyglądał nowy wiersz
wyniki.push(nowyWiersz); // Dodajemy nowy wiersz to wyników
}
// Zastępujemy zakres nowymi wierszami
zakres.setValues(wyniki);
}
Kilka uwag do skryptu
Zapewne wielu bardziej technicznych czytelników wyłapało, że przekształcanie liczby jakie zaproponowałem jest ryzykowne i podatne na błędy (ale wystarczające na potrzeby tego artykułu). W przypadku przygotowywania docelowego skryptu należałoby zadbać o lepsze sprawdzenie typów danych oraz o obsługę błędów.
Należy również wspomnieć o bezpieczeństwie. Zdecydowanie odradza się kopiowanie kodu znalezionego w Internecie bez jego zrozumienia. Kod taki może skasować lub (o zgrozo!) wykraść nasze dane, czy po prostu nie zadziałać. Zaś korzystanie z takich narzędzi jak Copilot, ChatGPT czy Gemini jest (póki co) nieefektywne, ponieważ te modele językowe często potrafią halucynować i zmyślać funkcje które nie istnieją. W takiej sytuacji polecamy skorzystać z usług profesjonalistów, którzy zadbają o bezpieczeństwo i przygotują odpowiednie rozwiązanie.
Dodatkowe uwagi dla bardziej zaawansowanych czytelników
W przypadku automatyzowania bardziej rozbudowanych procesów istnieje możliwość pisania funkcji w edytorze kodu takim jak VSCode i wgrywanie ich za pomocą narzędzia clasp
Poza tym Apps Scripts posiada pewne ograniczenia. Nie możemy wykonywać dowolnej liczby operacji. Dokładny opis limitów można znaleźć tutaj.
Podczas pracy z Apps Script może się zdarzyć że napotkacie taki błąd
Exceeded maximum execution time Google AppScript
W przypadku pojawienia się takiego błędu oznacza to, że wykorzystaliśmy limit operacji lub czas wykonywania skryptu.
Łatwo o taki błąd gdy robimy pętle i użyjemy w niej funkcji setValue
na przykład:
for (var i = 1; i <= dataRange.getLastRow(); i++) {
var cell = dataRange.getCell(i, 1);
cell.setValue("zaktualizowana wartość");
}
Aby uniknąć tego typu błędu, należy wyrzucić z pętli użycie funkcji setValue
wpisać dane do tymczasowej tablicy, a następnie wpisać wiele wartości na raz do zakresu funkcją setValues
. Poniżej przykład:
var values = [];
var range = sheet.getDateRange("B1:B5");
for (var i = 1; i <= range.getLastRow(); i++) {
var cell = range.getCell(i, 1);
values.push(cell.getValue() + 1); // Przechowujemy wynik w tablicy
}
range.setValues(values); // setValues wywłoane tylko raz
Tę samą technikę zastosowałem w przykładowym skrypcie.
Podsumowanie
Apps Script daje wiele możliwości i pozwala automatyzować procesy w usługach Google za pomocą prostych skryptów. To nie tylko nowatorskie podejście do automatyzacji, ale także szansa na stworzenie bardziej interaktywnych i angażujących doświadczeń dla użytkowników. Zaś możliwość łączenia tej technologii z takimi usługami jak ChatGPT rozbudza wyobraźnię!
Wiec nie zwlekaj i już dziś zapoznaj się z naszą ofertą aby zacząć świadczyć wysokiej jakości innowacyjne usługi swoim klientom!