Automatisk utvecklingsgraf i Google Sheets



Hej,

Detta inlägg kommer visa hur man lägger till ett script i Google Sheets som kopierar en cell varje vardag klockan 11 på kvällen. Med detta script kan man skapa grafer likt ovan som visar värdet på portföljen varje dag. Instruktionerna består av tre olika deluppgifter, dessa indikeras med fet text.

Det första steget i processen är att skapa ett nytt blad eller sheet som kommer att innehålla den sparade datan. För att skapa ett nytt blad klickar man på pluset nere i vänstra hörnet. För att underlätta nästa steg är det bra att ge bladet ett namn som t.ex. SaveData. Detta görs genom att högerklicka på bladets namn.
Öppna bladet som du precis skapat och bytt namn på. Tanken med det här bladet är alltså att sprara daglig data för värdet på portföljen. För att göra tydliga grafer rekommenderar jag att skriva in axlarnas namn längst upp i bladet på första raden, i detta fall är lämpliga namn Datum och Värde, se bild:

Nästa steg är att börja implementera scriptet som kommer att spara portföljvärdet. Om du inte kodat förut kan detta se läskigt ut men jag ska försöka beskriva alla steg så noggrant jag kan. För att skriva scripts i Google Sheets måste man öppna Tools (verktyg) avdelningen och sedan trycka Script Editor. Se bild nedan: 

När ni fått upp script editor borde du se en sida som ser ut så här.

Kopiera koden nedan och klistra in den i script editor fönstret, d.v.s. byt ut function myFunction() { } mot koden nedan.
När koden är tillagd ska det se ut på detta sätt.

För att ändringarna ska sparas måste du trycka ctrl + s (cmd + s på mac). Då borde det öppnas en ruta för att namnge scriptet/projektet. Döp det till något lämpligt, t.ex. SparaData. Om ni nu öppnar Google Sheets dokument igen så borde det efter några sekunder synas en ny menu kallad Andra funktioner.

Funktionen onOpen() är en inbyggd funktion i Google Sheets som aktiveras så fort du öppnar ditt Google Sheets dokument. Koden vi skrev ovan säger alltså, när personen öppnar dokumentet då ska vi göra det som står i funktionen, i detta fall att ropa på en annan funktion vid namn uiElement(). uiElement funktionen kommer i sin tur skapa ett menyval vid namn Andra funktioner och lägga till ett alternativ i denna. Vår kod kommer att skapa ett alternativ som heter Spara Data som kommer att kalla en funktion med namn saveData om alternativet klickas på.

Nästa steg är att lägga till funktionen som faktiskt sparar datan, alltså funktionen saveData som jag nämnde i tidigare paragraf. Denna funktion kommer att hämta värdet i en cell i ett visst blad och sedan spara den informationen i ett annat blad. Börja med att kopiera in koden nedan i samma script som vi arbetade i tidigare.

När koden är tillagd borde det se ut så här.

Den här koden kommer inte att köra eftersom tre stycken ändringar måste göras för att specificera var datan ska hämtas och sparas. Detta görs på rad 13, 14 och 16 i bilden ovan. Mitt blad där jag har min portfölj heter "Portfölj" och bladet jag vill spara i döpte jag innan till "SaveData". På rad 13 måste ni ändra det som står innanför parentesen, d.v.s. "Namn på blad där du vill spara", till namnet på det blad där du vill spara datan, i mitt fall "SaveData". På samma sätt gör ni på rad 14 fast ändrar "Namn på blad där du vill hämta värdet" till namnet på det blad ni vill hämta data ifrån, i mitt fall "Portfölj". Det är viktigt att namnet är innanför två citationstecken, "namn", precis som i den givna koden och bilden ovan.

Det sista steget är att ändra rad 16 som säger vilken cell ni vill hämta datan ifrån. I mitt fall är värdet på portföljen i cell F21, se bild nedan:
På samma sätt som förut måste ni byta ut texten "Cellen att ta data ifrån (ifrån det blad du specificerade ovan), t.ex. H23" mot cellen som ni vill hämta data ifrån, i mitt fall F21. När dessa ändringar är gjorda borde det se ut ungefär så här:
Viktigt att inte glömma bort att spara (ctrl + s eller cmd + s) annars kommer inte ändringarna att synas.

Det saveData funktionen gör är att den först hämtar de två blad vi specificerat. Sedan hämtar den datan i cellen (F21 i mitt fall) och dagens datum via Google Sheets inbyggda Utilities.formatDate funktion. Sedan sparas datan och datumets format ändras till MMM-yy vilket är t.ex. Mar-18 med hjälp av setNumberFormat funktionen. Det går att formatera datumet på många sätt genom att ändra strängen MMM-yy till önskat format, t.ex. yyyy-mm-dd

Nu är själva scriptet klart och det är bara att köra med menyn som lades till tidigare:
Innan det kan köras måste ni ge scriptet tillåtelse att göra ändringar i dokumentet. Då kommer det upp en ruta som följande.
Tryck continue (fortsätt) och följ instruktionerna.

Det kan vara så att webläsaren säger ifrån och klagar på att Scriptet inte är verifierat, detta ser ut på följande sätt.

Klicka då på att visa avancerade alternativ och sedan gå till SaveData (osäkert), bilden ovan belyser alternativen med rött. Logga sedan in med ert konto och återigen följ de resterande instruktionerna.

Grattis! Nu borde den sparade datan att synas i bladet SaveData varje gång du trycker på knappen som vi implementerade tidigare!


Det sista steget i den här resan är att automatisera processen att spara datan. Just nu är det möjligt att utföra funktionen via en knapp men vitsen var att spara den automatiskt. Detta görs med hjälp av triggers. Triggers hittas under menyn Edit (redigera) i Script Editor.


En ruta borde öppnas där det står att ni inte har några triggers i projektet. Klicka lägg till en ny trigger. Det finns två sätt att konfigurera dessa triggers. Antingen aktiveras triggern varje dag vid ett visst klockslag eller så aktiveras de varje vardag. Problemet med att aktiver triggern varje dag är att den även kommer att spara på t.ex. helger när börsen är stängd vilket resulterar i onödig data. Att spara varje dag görs med följande inställningar.
Alternativt kan man spara varje vardag men då måste man skapa separata triggers för varje dag. Se bild.
När ni satt upp triggers som ni önskar är det bara att trycka save (spara) så borde allt vara på plats.

Det var allt! Nu borde cellens värde sparas varje dag eller vardag. Viktigt att tänka på är att den alltid kommer att hämta data från en viss cell, om ni då ändrar runt i dokumentet eller lägger till nya rader som ändrar cellens position kommer fel data att sparas.

Tack för att ni läste. Var det något som var oklart? Kommentera gärna.

Etiketter: