Apps Script – Jak Zacząć? Automatyzacja arkuszy Google

Z tego artykułu dowiesz się czym jest Google Apps Script, poznasz ogólne zastosowania tej technologii oraz stworzysz swój pierwszy projekt Apps Script!

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.

Zrzut ekranu pokazujący własne menu w arkuszach Google
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.

Na podstawie arkusza można przygotować personalizowane oferty dla każdego klienta. A połączenie z Gemini lub ChatGPT otwiera drzwi do nowych niezliczonych możliwości!

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.

KtoWiekWiek (liczba)Ile lat jest pełnoletni
Piotrx24
Julia27 f
Andrzej 55
Magdalenatrzydzieści dwa (32)
Michał29
Marcin30
Przemysław32
Annama lat: 45
Barbara28
Przykładowe dane, możesz je zaznaczyć i skopiować do arkuszy Google
Zrzut ekranu przedstawiający tabelę z danymi w prowadzonymi do programu Arkusze Google

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.

Zrzut ekranu pokazujący gdzie jest przycisk Uruchom w Apps Script

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

Zrzut ekranu z Arkuszy Google pokazujący 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!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *