W Arkuszach Google możesz dodać funkcje skryptów. Dodam coś do onEdit
wydarzenia, ale nie wiem, czy to działa. O ile wiem, nie możesz debugować wydarzenia na żywo z Arkuszy Google, więc musisz to zrobić z debugera, co jest bezcelowe, ponieważ argument zdarzenia przekazany do mojej onEdit()
funkcji będzie zawsze niezdefiniowany, jeśli uruchomię go z Script Editor
.
Próbowałem więc użyć tej Logger.log
metody do rejestrowania niektórych danych za każdym razem, gdy onEdit
funkcja zostanie wywołana, ale to również wygląda na to, że działa tylko po uruchomieniu z Script Editor
. Kiedy uruchamiam go z poziomu Script Editor
, mogę przeglądać dzienniki, przechodząc doView->Logs...
Miałem nadzieję, że będę mógł zobaczyć dzienniki z czasu rzeczywistego wykonania zdarzenia, ale nie mogę tego rozgryźć.
Jak mogę debugować te rzeczy?
źródło
Logger.log('firstLog');MailApp.sendEmail({to:'[email protected]',subject: "subject here ^_^",body: Logger.getLog()});
Odpowiedzi:
AKTUALIZACJA:
Jak napisano w tej odpowiedzi,
Usługa Stackdriver Logging jest obecnie preferowaną metodą logowania.
Służy
console.log()
do logowania się do usługi Stackdriver.Logger.log
wyśle Ci e-mail (ostatecznie) o błędach, które wystąpiły w twoich skryptach lub, jeśli uruchamiasz rzeczy zScript Editor
, możesz wyświetlić dziennik z funkcji ostatniego uruchomienia, przechodząc doView->Logs
(nadal w edytorze skryptów). Ponownie, pokaże ci tylko wszystko, co zostało zarejestrowane z ostatniej funkcji, którą uruchomiłeś od wewnątrzScript Editor
.Skrypt, który próbowałem uruchomić, dotyczył arkuszy kalkulacyjnych - utworzyłem arkusz kalkulacyjny typu lista kontrolna zadań, który posortował elementy według priorytetów i tym podobne.
Jedyne wyzwalacze, które zainstalowałem dla tego skryptu, to wyzwalacze onOpen i onEdit. Debugowanie wyzwalacza onEdit było najtrudniejsze do rozgryzienia, ponieważ ciągle myślałem, że jeśli ustawię punkt przerwania w mojej funkcji onEdit, otworzę arkusz kalkulacyjny, wyedytuję komórkę, mój punkt przerwania zostanie wyzwolony. Nie o to chodzi.
Aby zasymulować edycję komórki, musiałem jednak zrobić coś w rzeczywistym arkuszu kalkulacyjnym. Jedyne, co zrobiłem, to upewnienie się, że komórka, którą chciałem traktować jako „edytowaną”, została wybrana, a następnie
Script Editor
przejdę doRun->onEdit
. Wtedy mój punkt przerwania zostałby trafiony.Jednak musiałem przestać używać argumentu zdarzenia, który jest przekazywany do funkcji onEdit - nie można tego zasymulować
Run->onEdit
. Wszelkie informacje, których potrzebowałem z arkusza kalkulacyjnego, takie jak wybrana komórka itp., Musiałem ustalić ręcznie.Tak czy inaczej, długa odpowiedź, ale w końcu to rozgryzłem.
EDYCJA :
Jeśli chcesz zobaczyć listę kontrolną rzeczy do zrobienia, możesz sprawdzić ją tutaj
(tak, wiem, że każdy może to edytować - o to właśnie chodzi w udostępnianiu!)
Miałem nadzieję, że dzięki temu zobaczysz również scenariusz. Ponieważ nie możesz tego zobaczyć, oto jest:
źródło
Prawda - więc zdefiniuj samodzielnie argument zdarzenia do debugowania. Zobacz Jak mogę przetestować funkcję wyzwalania w GAS?
To znowu prawda, ale jest pomoc. Biblioteka BetterLog Petera Hermanna przekieruje wszystkie dzienniki do arkusza kalkulacyjnego, umożliwiając logowanie nawet z kodu, który nie jest dołączony do instancji edytora / debugera.
Jeśli na przykład kodujesz w skrypcie zawierającym arkusz kalkulacyjny, możesz dodać tylko ten jeden wiersz na początku pliku skryptu, a wszystkie dzienniki zostaną umieszczone w arkuszu „Dzienniki” w arkuszu kalkulacyjnym. Żaden inny kod nie jest potrzebny, po prostu użyj
Logger.log()
tak, jak zwykle:źródło
console.log()
powinna być teraz najlepszą odpowiedziąAktualizacja 2017: usługa Stackdriver Logging jest teraz dostępna dla Google Apps Script. Z paska menu w edytorze skryptów przejdź
View > Stackdriver Logging
do : aby wyświetlić lub przesłać strumieniowo dzienniki.console.log () zapisze
DEBUG
komunikaty poziomuPrzykładowe
onEdit()
logowanie:Następnie sprawdź dzienniki w interfejsie użytkownika Stackdriver oznaczone etykietą,
onEdit() Event Object
aby zobaczyć dane wyjścioweźródło
Logger.log
. Czym się to różni od tego,console.log
którego używasz? Jestem bardzo nowy w narzędziach, więc po prostu próbuję dowiedzieć się, co to jest.Trochę hacky, ale utworzyłem tablicę o nazwie „konsola” i za każdym razem, gdy chciałem wyświetlać dane wyjściowe na konsolę, wypychałem do tablicy. Potem, ilekroć chciałem zobaczyć rzeczywisty wynik, po prostu wracałem
console
zamiast tego, co zwracałem wcześniej.źródło
console.log('smth')
działa idealnie, ale co w przypadku GAS?I just returned console
jak to drukujesz?Jeśli masz otwarty edytor skryptów, zobaczysz dzienniki w obszarze Widok-> Dzienniki. Jeśli Twój skrypt ma wyzwalacz onedit, wprowadź zmianę w arkuszu kalkulacyjnym, która powinna wyzwolić funkcję w edytorze skryptów otwartym w drugiej karcie. Następnie przejdź do zakładki edytora skryptów i otwórz dziennik. Zobaczysz wszystko, co funkcja przekazuje rejestratorowi.
Zasadniczo tak długo, jak długo edytor skryptów jest otwarty, zdarzenie zapisze się w dzienniku i pokaże go Tobie. Nie pokaże, czy ktoś inny jest w pliku w innym miejscu.
źródło
Przejrzałem te posty i jakoś znalazłem prostą odpowiedź, którą zamieszczam tutaj dla tych, którzy chcą krótkich i słodkich rozwiązań:
console.log("Hello World")
w swoim skrypcie.źródło
Mam ten sam problem, poniżej znalazłem gdzieś w sieci ....
Obsługa zdarzeń w Dokumentach jest jednak trochę skomplikowana. Ponieważ dokumenty mogą obsługiwać wiele jednoczesnych edycji przez wielu użytkowników, programy obsługi zdarzeń są obsługiwane po stronie serwera. Głównym problemem związanym z tą strukturą jest to, że gdy skrypt wyzwalacza zdarzenia zawiedzie, na serwerze kończy się niepowodzeniem. Jeśli chcesz zobaczyć informacje o debugowaniu, musisz ustawić jawny wyzwalacz w menu wyzwalaczy, który wyśle Ci e-mailem informacje o debugowaniu, gdy zdarzenie się nie powiedzie, w przeciwnym razie zakończy się niepowodzeniem.
źródło
Nie jest to eleganckie, ale podczas debugowania często loguję się do Loggera, a następnie używam getLog () do pobrania jego zawartości. Następnie ja albo:
Zasadniczo staje się to problemem wyjściowym JavaScript .
Rażąco brakuje mu funkcjonalności nowoczesnych
console.log()
implementacji, ale Logger nadal pomaga debugować Google Scripts.źródło
Tylko jako uwaga. Zrobiłem funkcję testową dla mojego arkusza kalkulacyjnego. Używam zmiennej Google wrzuca w funkcji onEdit (e) (nazwałem to e). Następnie wykonałem taką funkcję testową:
Wywołanie tej funkcji testowej powoduje, że cały kod działa tak, jak zdarzenie w arkuszu kalkulacyjnym. Po prostu wstawiłem posiadaną komórkę, którą edytowałem, co dało mi nieoczekiwany wynik, ustawiając wartość jako wartość, którą umieściłem w komórce. OBS! aby uzyskać więcej zmiennych, które Google daje funkcji, przejdź tutaj: https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events
źródło
Obecnie jesteś ograniczony do kontenera związanego z używaniem skryptów w dokumentach. Jeśli utworzysz nowy skrypt poza dokumentami, będziesz mógł wyeksportować informacje do arkusza kalkulacyjnego Google i używać go jako narzędzia do logowania.
Na przykład w pierwszym bloku kodu
Kiedy pracuję z GASem, mam dwa monitory (można użyć dwóch okien) skonfigurowane z jednym zawierającym środowisko GAS, a drugim zawierającym SS, więc mogę zapisywać informacje i logować się.
źródło
Konsola programisty będzie rejestrować błędy generowane przez skrypt aplikacji, więc możesz po prostu zgłosić błąd, aby został zarejestrowany jako normalny plik console.log. Zatrzyma wykonywanie, ale nadal może być przydatny do debugowania krok po kroku.
pojawi się w konsoli podobnie do
console.log('hello world')
źródło
po prostu zdebuguj kod swojego arkusza kalkulacyjnego w następujący sposób:
pokazuje tak:
źródło
onEdit
)