Handledning för Google Apps Script för att bemästra makron

Effektiva chefer vet att tiden är den begränsande faktorn... Ingenting annat kanske skiljer effektiva chefer så mycket ut som deras ömma kärleksfulla omsorg om tiden.

Peter Drucker

Tid är vår mest värdefulla resurs. Vi vill spendera det på de mest inflytande och mest värdeskapande aktiviteterna vi kan, inte bara för att de vanligtvis har det högsta monetära värdet, utan också för att ständigt utmana oss själva och maximera vår arbetstillfredsställelse.

Det finns många sätt att förbättra din effektivitet och produktivitet för att bättre utnyttja din tid. I en tidigare artikel om Google Sheets har jag utvecklat hur kraften i onlinesamarbete är en sådan nyckel till ökad produktivitet.

I en annan artikel visade jag hur programmeringsspråket Python kan vara ett kraftfullt analys- och uppgiftsautomatiseringsverktyg för ekonomipersonal.

Med inspiration från detta vill jag nu presentera en handledning för Google Apps Script. Med Google Apps Script kan du skriva skript och program i JavaScript för att automatisera, ansluta och utöka produkterna i Googles G Suite, inklusive Kalkylark, Dokument, Presentationer, Gmail, Drive och flera andra. Att lära sig det kräver en investering i tid, liksom att skriva manus, men produktiviteten ökar och ytterligare möjligheter som det öppnar gör det väl värt det.

Som ett första steg, låt oss börja med att titta på ett välbekant koncept:makron.

Spela in och använda makron i Google Sheets

Om du har ägnat mycket tid åt att arbeta med Excel, kommer du säkert att ha kommit i kontakt med Excels VBA (Visual Basic for Applications) makrogränssnitt någon gång. Antingen genom att spela in eller skriva dem själv eller genom att piggybacka bort sådana som skapats av andra.

Makron är ett utmärkt sätt att automatisera repetitiva och tråkiga arbetsflöden. VBA kanske inte är ett språk du ägnat mycket tid åt att lära dig, men dess skönhet var att du egentligen inte behövde det för att bli produktiv och skapa dina egna makron. Du kan helt enkelt spela in arbetsflödet du vill automatisera och sedan gå in i koden och göra de små ändringar som behövs för att göra makrot mer allmänt.

På vissa sätt är VBA en fantastisk och bortglömd läxa för hur man introducerar icke-tekniska människor till kodning . Sättet du kan spela in åtgärder och sedan ha koden ifylld för senare granskning är verkligen ett mycket mer pragmatiskt sätt att lära dig genom att läsa läroböcker och passivt titta på tutorials.

Samma inspelningsfunktion som VBA är tillgänglig i Google Sheets. Här är ett enkelt exempel på hur man använder det:

Låt oss börja med några exempeldata och använda en IMPORTHTML-fråga för att importera en tabell. I det här exemplet har jag laddat ner en lista från Wikipedia över de 15 största hedgefonderna i världen. Det är självklart, men detta är ett godtyckligt exempel; avsikten är att du ska fokusera mer på applikationen, över ämnet.

Makroinspelningsprocessen startas via följande menysökväg:Verktyg> Makron> Spela in makro.

Vi går sedan igenom de åtgärder (PC-format) som vi vill spela in:

  1. Välj den första raden
  2. Tryck på Skift + Ctrl + nedåtpil för att markera allt
  3. Ctrl + C för att kopiera
  4. Skift + F11 för att skapa ett nytt ark
  5. Ge arket ett nytt namn
  6. Tryck på Skift + Ctrl + V för att klistra in värden

När du är klar trycker du på knappen Spara i makrofönstret längst ner, ge det ett namn och en valfri kortkommando.

För enklare åtgärder som kan replikeras exakt genom samma steg, skulle processen sluta här och du kan börja använda ditt makro direkt. I det här fallet måste vi dock göra några ändringar innan koden kan användas. Till exempel måste arket vi kopierar till ha ett annat namn varje gång. Låt oss se hur du gör detta.

Skriva Google Apps Script manuellt

Nu kommer vi att se benen i Google Apps Script för första gången; programmeringsplattformen som körs på Googles servrar. Detta driver våra makron och låter dig skapa mycket komplexa arbetsflöden, och till och med tillägg, för själva applikationerna. Den kan användas för att automatisera inte bara kalkylarksarbete utan faktiskt nästan allt som är sammankopplat inom Googles G Suite.

Programmeringsspråket för Apps Script är JavaScript , ett av de mest populära programmeringsspråken, vilket innebär att det finns en mängd resurser där ute för alla som vill lära sig mycket. Men precis som med VBA behöver du egentligen inte:du kan använda samma Record-funktionalitet och helt enkelt göra de steg du vill ska kunna upprepa automatiskt. Resultatet från inspelningen kan se grovt ut och kommer troligen inte att matcha perfekt med vad du vill få gjort, men det kommer att ge en tillräckligt solid utgångspunkt. Låt oss nu göra det för manuset vi just spelade in.

När du spelar in är det klokt att vara försiktig så att du inte av misstag spelar in några ytterligare steg som du inte vill ska fångas i den slutliga inspelningen, men det är ibland svårt att undvika:något så enkelt som att välja en annan cell innan du trycker på stoppknappen Inspelningsknappen kommer att fångas och sedan upprepas varje gång du kör skriptet. Det första steget när du redigerar vårt skript skulle vara att rensa upp det och ta bort sådana steg. Låt oss dyka in genom att gå till Verktyg> Skriptredigerare i filmenyn.

Om du kan JavaScript kommer du att känna igen detta direkt, och du kan också bli förvånad över att se nyckelordet "var" istället för "låt" eller "const" som du skulle se i modern JavaScript. Detta återspeglar det faktum att JavaScript-versionen i Apps Script är ganska gammal och inte stöder många av språkets nyare funktioner. Mot slutet kommer jag dock att introducera en lösning för dem som vill använda de senaste språkfunktionerna.

När du kör skriptet första gången kommer det att be om auktorisering, vilket är vettigt, eftersom skript kan ändra (och eventuellt radera) all din data. Du kommer troligen att känna igen auktoriseringsprocessen från andra Google-produkter.

Nu kan vi börja modifiera koden. Ändringarna vi behöver göra är små, men om du gör detta för första gången kan det fortfarande kräva en snabb sökning i Sheets Apps Script-dokumentationen och/eller en snabb uppslagning av ett JavaScript-koncept, som att arbeta med datum. Här kommer det faktum att JavaScript är ett så utbrett språk till nytta:En lösning för vilket problem du än möter eller funktion kommer att tänka på kan vanligtvis snabbt hittas om du formulerar din sökterm på ett enkelt sätt.

Ändringarna som gjorts i den här versionen av skriptet från den ursprungliga inspelade versionen är att istället för det hårdkodade namnet för det nya arket som vi skapar, namnger vi det nu med dagens datum istället. Dessutom ändrar vi också kopieringsvägen i slutet för att referera till detta nya ark. De sista fyra raderna visar också hur man utför vissa formateringsoperationer, som att ändra värdet på en cell, ändra storlek på kolumner och dölja rutnät.

function createSnapshot() {
  var spreadsheet = SpreadsheetApp.getActive();
  var date = new Date().toISOString().slice(0,10);
  var destination = spreadsheet.insertSheet(date);
  
  spreadsheet.getRange('HTML!A1:F1').activate();
  spreadsheet.getSelection()
    .getNextDataRange(SpreadsheetApp.Direction.DOWN)
    .activate();
  
  spreadsheet.getActiveRange()
    .copyTo(SpreadsheetApp.setActiveSheet(destination)
    .getRange(1,1),
    SpreadsheetApp.CopyPasteType.PASTE_VALUES,false);
  
  var sheet = spreadsheet.setActiveSheet(destination)
  sheet.getRange("D1").setValue("AUM $bn")
  sheet.setHiddenGridlines(true);
  sheet.getRange("A1:D1").setFontWeight("bold");
  sheet.autoResizeColumns(1, 4);
};

Om du kör skriptet nu kommer det att visa att det nya arket verkligen har ett namn med dagens datum och innehåller informationen som kopierats som värden (inte formler) från huvudarket.

Diagramvisualiseringar kan nu läggas till genom att använda samma registreringsprocess. Jag använde detta för att skapa tre enkla diagram.

Att rensa upp koden för varje kommer att se ut ungefär så här:

function createColumnChart() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C1:D16').activate();
  var sheet = spreadsheet.getActiveSheet();
  chart = sheet.newChart()
  .asColumnChart()
  .addRange(spreadsheet.getRange('B1:D16'))
  .setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
  .setTransposeRowsAndColumns(false)
  .setNumHeaders(-1)
  .setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH)
  .setOption('useFirstColumnAsDomain', true)
  .setOption('curveType', 'none')
  .setOption('domainAxis.direction', 1)
  .setOption('isStacked', 'absolute')
  .setOption('series.0.color', '#0b5394')
  .setOption('series.0.labelInLegend', 'AUM $bn')
  .setPosition(19, 6, 15, 5)
  .build();
  sheet.insertChart(chart);
};

Återigen, oroa dig inte om några av alternativen ser förvirrande ut:allt detta är automatiskt genererat, du behöver bara förstå tillräckligt för att ta bort de onödiga stegen och kanske göra små justeringar senare.

Exempel på avancerade Google Apps-skript:Ansluta Kalkylark till Google Drive och Slides

Allt börjar nu ta form, men tänk om den faktiska produktionen vi vill ha inte är ett kalkylblad utan en presentation? Om så är fallet kan det mesta av arbetet härifrån fortfarande vara manuellt, och vi har inte sparat mycket tid om vi behöver göra detta på återkommande basis.

Låt oss nu utforska hur det kan se ut att automatisera skapandet av en presentation med hjälp av exempeldata från vårt kalkylblad.

Denna övning blir nu mer avancerad av två anledningar:

  1. Vi måste bekanta oss med hur vi arbetar med Google Presentationer (och Google Drive) förutom Kalkylark.
  2. I Presentationer, eller när du arbetar mellan G Suite-appar i allmänhet, finns det ingen "Spela in makro"-funktion tillgänglig. Det betyder att du behöver veta tillräckligt om Apps Script (och vara bekväm med att navigera i dokumentationen för var och en av G Suite-produkterna) för att skriva skript från grunden.

Detta nästa exempel är tänkt att ge några grundläggande byggstenar för att komma igång och bekanta dig med.

Till att börja med, låt oss skapa en mall som vi senare vill fylla med innehåll med vårt skript. Här är två enkla presentationsbilder som jag satt ihop:

Därefter måste du få ID:t för den här mallen eftersom du måste hänvisa till den i ditt skript. Undermedvetet kommer du att ha sett detta ID många gånger eftersom det i själva verket är den slumpmässiga sekvensen av tecken och siffror som du ser i webbläsarens URL:

https://docs.google.com/presentation/p/detta_är_ditt_presentations-ID /edit#slide=id.p.

Nu måste vi lägga till följande rader till vårt ursprungliga manus. Detta kommer igen att be om auktorisering, den här gången för att komma åt din Google Drive.

function createPresentation() {
  var templateId = "insert_your_template_presentation_id_here";
  var template = DriveApp.getFileById(templateId);
  var copy = template.makeCopy("Weekly report " + date).getId();
  var presentation = SlidesApp.openById(copy);
}

Du kommer inte att se någon omedelbar visuell feedback om du kör det här kodavsnittet, men om du tittar i mappen på din Google Drive där du lagrade mallen kommer du att upptäcka att en kopia av den verkligen har skapats, och den har dagens datum i filnamnet. Vi har fått en bra start!

Låt oss nu använda fler byggstenar för att börja fylla det med innehåll, programmatiskt istället för för hand. Lägg till följande rader till samma funktion:

  presentation.getSlides()[0]
    .getPageElements()[0]
    .asShape()
    .getText()
    .setText("Weekly Report " + date);

Nu blir det lite mer intressant, eftersom vi har ändrat den första sidan till att inkludera dagens datum. I Slides, som i Sheets, arbetar du med objekt (representerade av klasser) som var och en har egenskaper och metoder (dvs bifogad funktionalitet). Dessa är organiserade i en hierarki, med SpreadsheetsApp, DriveApp eller SlidesApp som objekt på toppnivå. I kodavsnittet ovan måste vi gå igenom denna hierarki steg-för-steg för att nå elementet vi vill redigera, i det här fallet:Texten i en textruta. Praktiskt sett innebär detta att vi når genom Presentation, Slide, PageElement och Shape-objekt, tills vi äntligen kommer till TextRange-objektet som vi vill redigera.

Att hålla reda på vilken typ av objekt du har att göra med kan vara förvirrande och de buggar som uppstår när du försöker tillämpa en operation på fel objekt kan vara svåra att lösa. Tyvärr ger hjälpfunktionen och felmeddelandena i själva skriptredigeraren inte alltid så mycket vägledning här, utan det märkliga är att sådan uppmärksamhet åtminstone kommer att förbättra dina rutiner för kvalitetskontroll.

Efter att ha skapat presentationen och uppdaterat titeln är det nu dags att infoga ett av våra nya diagram i den. Med tanke på objekthierarkin bör följande kod nu vara vettig:

  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName(date);
  var chart = sheet.getCharts()[0];
  
  var position = {left: 25, top: 75};
  var size = {width: 480, height: 300};
  
  presentation.getSlides()[1]
    .insertSheetsChart(chart,
      position.left,
      position.top,
      size.width,
      size.height);

Om du kör hela skriptet bör utdatapresentationen se ut ungefär så här:

Förhoppningsvis illustrerar detta exempel principerna och ger inspiration för att komma igång med ditt eget experiment. Om du tänker efter så är jag säker på att du kan hitta åtminstone några exempel på manuellt arbete som utförts i ditt företag idag som verkligen borde automatiseras på detta sätt. Fungerar för att frigöra tid för att tänka, analysera och tillämpa bedömningar, snarare än att mekaniskt blanda data från ett format och/eller plats till ett annat. Förbättra utvecklingsupplevelsenSom nämnts tidigare är JavaScript-versionen som stöds i Google Apps Script gammal och funktionaliteten av onlineskriptredigeraren är mycket begränsad. Om du bara spelar in ett makro eller skriver några dussin rader kommer du inte att märka det. Om du däremot har ambitiösa planer på att automatisera alla aspekter av din vecko- eller månadsrapportering, eller vill bygga plugins, kommer du att vara glad att veta att det finns ett kommandoradsverktyg som låter dig utveckla med din favoritutvecklingsmiljö .

Om du har sådana kunskapsnivåer, kommer du förmodligen också att vilja dra nytta av de senaste funktionerna som JavaScript har att erbjuda, och potentiellt ännu mer, eftersom du med kommandoradsverktyget också kan utveckla i TypeScript.

Använda Python för Google Sheets-programmering

Om du upptäcker att det inte är din kopp te att arbeta med Apps Script, så finns det andra alternativ, beroende på användningsfallet. Om du vill göra mer avancerad nummerknäppning, ansluta till API:er eller databaser, eller helt enkelt föredrar Python-programmeringsspråket framför JavaScript, så är Googles Colaboratory en ovärderlig produkt. Den ger dig en Jupyter-anteckningsbok som körs på Googles servrar som gör att du kan skriva Python-skript som integreras sömlöst med dina Google Drive-filer och, genom "gspread"-biblioteket, gör det enkelt att arbeta med dina kalkylbladsdata.

Jag beskrev många av fördelarna med Python i en artikel om hur man använder den för finansiella funktioner, som också fungerar som en skonsam introduktion till att arbeta med Python- och Jupyter-anteckningsböcker i ett affärsmässigt och finansiellt sammanhang. En mycket viktig fördel för mig är att till skillnad från med Apps Script är Python-anteckningsboken i Colaboratory interaktiv, så du ser resultaten (eller felmeddelandet) efter att ha kört varje rad eller litet kodblock.

Automation är beroendeframkallande

Denna handledning för Google Apps Script visade en glimt av vad som är möjligt genom Googles kodningsspråk. Möjligheterna är praktiskt taget oändliga. Men om du inte har en teknisk bakgrund kan kodexemplen se skrämmande ut och du kanske tänker för dig själv att produktivitetsvinsterna från att lära dig Google Apps Script kanske inte är tillräckliga nog för att uppväga den betydande investeringen i form av tid som krävs att lära sig det.

Detta beror naturligtvis på många faktorer, inklusive vilken typ av roll du har, eller förväntar dig att ha, i framtiden. Men även om du inte förväntar dig att göra något som liknar exemplen som visas här, att ha en förståelse för vad som är möjligt och ungefär hur mycket arbete det skulle ta att implementera kan trigga tankar och idéer kring hur du kan förbättra produktiviteten i ditt företag, för dina kunder, eller dig själv personligen.

Personligen kan jag intyga tillfredsställelsen av att luta mig tillbaka och trycka på en knapp som slutför en timmes tråkigt manuellt arbete på under en minut. Efter att ha gjort detta för 50:e gången kommer du att vara tacksam för de par timmar som ägnats åt att lägga ihop allt i första hand, vilket i slutändan har tjänat till att frigöra din tid för mer värdeadditiva sysselsättningar. Efter ett tag blir dessa skalbarhetsfördelar beroendeframkallande.


Företagsfinansiering
  1. Bokföring
  2. Affärsstrategi
  3. Företag
  4. Kundrelationshantering
  5. finansiera
  6. Lagerhantering
  7. Privatekonomi
  8. investera
  9. Företagsfinansiering
  10. budget
  11. Besparingar
  12. försäkring
  13. skuld
  14. avgå