Google Apps Script-zelfstudie voor het beheersen van macro's

Effectieve executives weten dat tijd de beperkende factor is... Niets anders onderscheidt effectieve executives misschien zo veel als hun liefdevolle zorg voor tijd.

Peter Drucker

Tijd is onze meest waardevolle hulpbron. We willen het besteden aan activiteiten met de grootste impact en de meeste waarde die we kunnen bieden, niet alleen omdat die meestal de hoogste geldwaarde hebben, maar ook om onszelf voortdurend uit te dagen en onze arbeidsvreugde te maximaliseren.

Er zijn veel manieren om uw efficiëntie en productiviteit te verbeteren om uw tijd beter te besteden. In een eerder artikel over Google Spreadsheets heb ik uitgelegd hoe de kracht van online samenwerking zo'n sleutel is tot verhoogde productiviteit.

In een ander artikel heb ik laten zien hoe de programmeertaal Python een krachtige analyse- en taakautomatiseringstool kan zijn voor financiële professionals.

Geïnspireerd door dit, wil ik nu een Google Apps Script-tutorial presenteren. Met Google Apps Script kunt u scripts en programma's in JavaScript schrijven om de producten in de G Suite van Google, waaronder Spreadsheets, Documenten, Presentaties, Gmail, Drive en verschillende andere, te automatiseren, te verbinden en uit te breiden. Het leren ervan vereist een investering in tijd, net als het schrijven van de scripts, maar de productiviteitsstijging en de extra mogelijkheden die het biedt, maken het de moeite waard.

Laten we als eerste stap eens kijken naar een bekend concept:macro's.

Macro's opnemen en gebruiken in Google Spreadsheets

Als u veel tijd hebt besteed aan het werken met Excel, bent u vast en zeker op een gegeven moment in contact gekomen met Excel's VBA (Visual Basic for Applications) macro-interface. Ofwel door ze zelf op te nemen of te schrijven, of door mee te liften op degenen die door anderen zijn gemaakt.

Macro's zijn een geweldige manier om repetitieve en vervelende workflows te automatiseren. VBA is misschien geen taal die je veel tijd hebt besteed om te leren, maar het mooie was dat je het niet echt nodig had om productief te worden en je eigen macro's te maken. U kunt eenvoudig de workflow opnemen die u wilt automatiseren en vervolgens de code ingaan en de kleine wijzigingen aanbrengen die nodig zijn om de macro algemener te maken.

In sommige opzichten is VBA een geweldige en vergeten les om niet-technische mensen kennis te laten maken met coderen . De manier waarop u acties kunt vastleggen en vervolgens de code kunt laten invullen voor latere beoordeling, is inderdaad een veel pragmatischere manier van leren dan het lezen van studieboeken en passief kijken naar tutorials.

Dezelfde opnamefunctionaliteit van VBA is beschikbaar in Google Spreadsheets. Hier is een eenvoudig voorbeeld van hoe het te gebruiken:

Laten we beginnen met enkele voorbeeldgegevens, waarbij we een IMPORTHTML-query gebruiken om een ​​tabel te importeren. In dit voorbeeld heb ik een lijst van Wikipedia gedownload van de 15 grootste hedgefondsen ter wereld. Het spreekt voor zich, maar dit is een willekeurig voorbeeld; het is de bedoeling dat u zich meer op de toepassing concentreert, op het onderwerp.

Het macro-opnameproces wordt gestart via het volgende menupad:Extra> Macro's> Macro opnemen.

We lopen dan door de acties (pc-formaat) die we willen opnemen:

  1. Selecteer de eerste rij
  2. Druk op Shift + Ctrl + pijl-omlaag om alles te selecteren
  3. Ctrl + C om te kopiëren
  4. Shift + F11 om een ​​nieuw blad te maken
  5. Geef het blad een nieuwe naam
  6. Druk op Shift + Control + V om waarden te plakken

Als u klaar bent, drukt u op de knop Opslaan in het macrovenster onderaan, geeft u het een naam en een optionele sneltoets.

Voor eenvoudigere acties die precies via dezelfde stappen kunnen worden gerepliceerd, zou het proces hier eindigen en kunt u uw macro meteen gaan gebruiken. In dit geval moeten we echter enkele wijzigingen aanbrengen voordat de code bruikbaar is. Het blad waarnaar we kopiëren, moet bijvoorbeeld elke keer een andere naam hebben. Laten we eens kijken hoe we dit kunnen doen.

Google Apps Script handmatig schrijven

Nu zullen we voor het eerst de botten van Google Apps Script zien; het programmeerplatform dat op de servers van Google draait. Dit drijft onze macro's aan en stelt u in staat om zeer complexe workflows en zelfs add-ons voor de applicaties zelf te creëren. Het kan worden gebruikt om niet alleen spreadsheetwerk te automatiseren, maar eigenlijk bijna alles dat met elkaar verbonden is binnen de G Suite van Google.

De programmeertaal van Apps Script is JavaScript , een van de meest populaire programmeertalen, wat betekent dat er een schat aan bronnen is voor iedereen die uitgebreid wil leren. Maar net als bij VBA is dat niet echt nodig:je kunt dezelfde Record-functionaliteit gebruiken en gewoon de stappen uitvoeren die je automatisch wilt kunnen herhalen. De uitvoer van de opname ziet er misschien grof uit en komt hoogstwaarschijnlijk niet perfect overeen met wat u gedaan wilt krijgen, maar het biedt een solide genoeg startpunt. Laten we het nu doen voor het script dat we zojuist hebben opgenomen.

Bij het opnemen is het zinvol om ervoor te zorgen dat u niet per ongeluk extra stappen opneemt die u niet wilt vastleggen in de uiteindelijke opname, maar het is soms moeilijk te vermijden:zoiets eenvoudigs als het selecteren van een andere cel voordat u op de knop Stop drukt De opnameknop wordt vastgelegd en vervolgens herhaald elke keer dat u het script uitvoert. De eerste stap bij het bewerken van ons script zou zijn om het op te ruimen en dergelijke stappen te verwijderen. Laten we erin duiken door naar Extra> Scripteditor in het bestandsmenu te gaan.

Als u JavaScript kent, zult u dit direct herkennen, en u zult misschien ook verrast zijn om het trefwoord "var" te zien in plaats van "let" of "const", zoals u zou zien in modern JavaScript. Dit weerspiegelt het feit dat de JavaScript-versie in Apps Script vrij oud is en niet veel van de recentere functies van de taal ondersteunt. Tegen het einde zal ik echter een tijdelijke oplossing introduceren voor degenen die de meest recente taalfuncties willen gebruiken.

Wanneer u het script de eerste keer uitvoert, zal het om autorisatie vragen, wat logisch is, aangezien scripts al uw gegevens kunnen wijzigen (en mogelijk verwijderen). U herkent het autorisatieproces waarschijnlijk van andere Google-producten.

Nu kunnen we beginnen met het aanpassen van de code. De wijzigingen die we moeten aanbrengen zijn klein, maar als je dit voor de eerste keer doet, moet je misschien nog even snel zoeken in de Sheets Apps Script-documentatie en/of snel een JavaScript-concept opzoeken, zoals werken met datums. Hier komt het feit dat JavaScript zo'n wijdverbreide taal is, goed van pas:een oplossing voor elk probleem of elke functionaliteit die in je opkomt, kan meestal snel worden gevonden als je je zoekterm op een eenvoudige manier formuleert.

De wijzigingen die in deze versie van het script zijn aangebracht ten opzichte van de originele opgenomen versie, zijn dat in plaats van de hardcoded naam voor het nieuwe blad dat we maken, we het nu een naam geven met de datum van vandaag. Daarnaast wijzigen we ook het kopieerpad aan het einde om naar dit nieuwe blad te verwijzen. De laatste vier rijen laten ook zien hoe u enkele opmaakbewerkingen kunt uitvoeren, zoals het wijzigen van de waarde van een cel, het formaat van kolommen wijzigen en rasterlijnen verbergen.

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);
};

Als u het script nu uitvoert, ziet u dat het nieuwe blad inderdaad de datum van vandaag heeft en de informatie bevat die is gekopieerd als waarden (geen formules) van het hoofdblad.

Grafiekvisualisaties kunnen nu worden toegevoegd met hetzelfde recordproces. Ik heb dit gebruikt om drie eenvoudige grafieken te maken.

Het opschonen van de code voor elk ziet er ongeveer zo uit:

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);
};

Nogmaals, maak je geen zorgen als sommige opties er verwarrend uitzien:dit wordt allemaal automatisch gegenereerd, je hoeft alleen genoeg te begrijpen om de onnodige stappen te verwijderen en misschien later kleine aanpassingen door te voeren.

Geavanceerde Google Apps-scriptvoorbeelden:Spreadsheets verbinden met Google Drive en Presentaties

Alles begint nu vorm te krijgen, maar wat als de eigenlijke output die we willen geen spreadsheet is maar een presentatie? Als dat het geval is, kan het meeste werk van hier nog steeds handmatig zijn en hebben we niet veel tijd bespaard als we dit op een terugkerende basis moeten doen.

Laten we nu eens kijken hoe het eruit zou kunnen zien om het maken van een presentatie te automatiseren met behulp van de voorbeeldgegevens uit onze spreadsheet.

Deze oefening wordt nu geavanceerder om twee redenen:

  1. We moeten ons vertrouwd maken met het werken met Google Presentaties (en Google Drive) naast Spreadsheets.
  2. In Presentaties, of bij het werken tussen G Suite-apps in het algemeen, is er geen functie 'Macro opnemen' beschikbaar. Dit betekent dat u voldoende moet weten over Apps Script (en comfortabel door de documentatie voor elk van de G Suite-producten moet navigeren) om helemaal opnieuw scripts te kunnen schrijven.

Dit volgende voorbeeld is bedoeld om een ​​aantal basisbouwstenen te bieden om u op weg te helpen en vertrouwd te maken.

Laten we om te beginnen een sjabloon maken die we later willen vullen met inhoud met behulp van ons script. Hier zijn twee eenvoudige presentatiedia's die ik heb samengesteld:

Vervolgens moet u de ID van deze sjabloon ophalen, omdat u ernaar moet verwijzen in uw script. Onbewust zult u deze ID vaak hebben gezien, omdat het in feite de willekeurig ogende reeks tekens en cijfers is die u in de URL van uw browser ziet:

https://docs.google.com/presentation/p/this_is_your_presentation_ID /edit#slide=id.p.

Nu moeten we de volgende regels toevoegen aan ons originele script. Dit zal opnieuw om autorisatie vragen, dit keer om toegang te krijgen tot uw 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);
}

U zult geen onmiddellijke visuele feedback zien als u dit codefragment uitvoert, maar als u in de map van uw Google Drive kijkt waar u de sjabloon had opgeslagen, zult u zien dat er inderdaad een kopie van is gemaakt, en het heeft de huidige datum in de bestandsnaam. We zijn goed begonnen!

Laten we nu meer bouwstenen gebruiken om het te vullen met inhoud, programmatisch in plaats van met de hand. Voeg de volgende rijen toe aan dezelfde functie:

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

Nu worden de dingen een beetje interessanter, omdat we de eerste pagina hebben gewijzigd met de datum van vandaag. In Presentaties werk je, net als in Spreadsheets, met objecten (weergegeven door klassen) die elk eigenschappen en methoden hebben (d.w.z. gekoppelde functionaliteit). Deze zijn gerangschikt in een hiërarchie, waarbij SpreadsheetsApp, DriveApp of SlidesApp het object op het hoogste niveau is. In het bovenstaande codefragment moeten we stap voor stap door deze hiërarchie gaan om bij het element te komen dat we willen bewerken, in dit geval:de tekst in een tekstvak. Praktisch gesproken betekent dit dat we door de presentatie-, dia-, pagina-element- en vormobjecten reiken, totdat we uiteindelijk bij het TextRange-object komen dat we willen bewerken.

Het kan verwarrend zijn om bij te houden met welk type object u te maken hebt en de bugs die het gevolg zijn van het toepassen van een bewerking op het verkeerde object kunnen moeilijk op te lossen zijn. Helaas bieden de helpfunctionaliteit en foutmeldingen in de Scripteditor zelf hier niet altijd veel begeleiding, met als voordeel dat dergelijke aandacht in ieder geval uw kwaliteitscontrolepraktijken zal verbeteren.

Nadat de presentatie is gemaakt en de titel is bijgewerkt, is het nu tijd om een ​​van onze nieuwe grafieken erin in te voegen. Met de hiërarchie van objecten in gedachten, zou de volgende code nu logisch moeten zijn:

  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);

Als u het volledige script uitvoert, ziet de uitvoerpresentatie er ongeveer zo uit:

Hopelijk illustreert dit voorbeeld de principes en biedt het inspiratie om u op weg te helpen met uw eigen experimenten. Als je erover nadenkt, weet ik zeker dat je op zijn minst een paar voorbeelden kunt vinden van handmatig werk dat tegenwoordig in je bedrijf wordt gedaan en dat echt op deze manier zou moeten worden geautomatiseerd. Dient om tijd vrij te maken om na te denken, te analyseren en een oordeel toe te passen, in plaats van mechanisch gegevens van de ene indeling en/of plaats naar de andere te verplaatsen.De ontwikkelervaring verbeteren Zoals eerder vermeld, is de JavaScript-versie die wordt ondersteund in Google Apps Script oud en de functionaliteit van de online Script Editor is zeer beperkt. Als je gewoon een macro opneemt of een paar dozijn regels schrijft, zul je het niet echt merken. Als u echter ambitieuze plannen heeft om alle aspecten van uw wekelijkse of maandelijkse rapportage te automatiseren, of plug-ins wilt bouwen, dan zult u blij zijn te weten dat er een opdrachtregeltool is waarmee u kunt ontwikkelen met uw favoriete ontwikkelomgeving .

Als je een dergelijk vaardigheidsniveau hebt, wil je waarschijnlijk ook profiteren van de meest recente functies die JavaScript te bieden heeft, en mogelijk zelfs meer, omdat je met de opdrachtregeltool ook in TypeScript kunt ontwikkelen.

Python gebruiken voor Google Spreadsheets-programmering

Als u merkt dat werken met Apps Script niet uw ding is, dan zijn er andere opties, afhankelijk van het gebruik. Als u meer geavanceerde cijferanalyse wilt doen, verbinding wilt maken met API's of databases, of gewoon de voorkeur geeft aan de programmeertaal Python boven JavaScript, dan is Google's Colaboratory een product van onschatbare waarde. Het geeft je een Jupyter-notebook die draait op de servers van Google, waarmee je Python-scripts kunt schrijven die naadloos integreren met je Google Drive-bestanden en waarmee je via de 'gspread'-bibliotheek gemakkelijk met je spreadsheetgegevens kunt werken.

Ik heb veel van de voordelen van Python uiteengezet in een artikel over het gebruik ervan voor financiële functies, dat ook dient als een zachte introductie tot het werken met Python- en Jupyter-notebooks in een zakelijke en financiële context. Een heel belangrijk voordeel voor mij is dat, in tegenstelling tot Apps Script, de Python-notebook in Colaboratory interactief is, dus je ziet de resultaten (of foutmelding) na het uitvoeren van elke regel of klein blok code.

Automatisering is verslavend

Deze Google Apps Script-tutorial liet een glimp zien van wat mogelijk is via de codeertaal van Google. De mogelijkheden zijn vrijwel eindeloos. Als u echter geen technische achtergrond heeft, kunnen de codevoorbeelden er ontmoedigend uitzien en denkt u misschien bij uzelf dat de productiviteitswinst die wordt behaald door het leren van Google Apps Script niet voldoende is om op te wegen tegen de aanzienlijke investering in termen van benodigde tijd om het te leren.

Dit hangt natuurlijk van veel factoren af, waaronder wat voor soort rol je hebt of verwacht te hebben in de toekomst. Maar zelfs als u niet verwacht iets vergelijkbaars te doen met de voorbeelden die hier worden getoond, kan het hebben van inzicht in wat mogelijk is en hoeveel werk het ongeveer zou kosten om te implementeren, gedachten en ideeën oproepen over hoe u de productiviteit in uw bedrijf kunt verbeteren, bijvoorbeeld uw klanten, of uzelf persoonlijk.

Persoonlijk kan ik getuigen van de voldoening om achterover te leunen en op een knop te drukken die een uur vervelend handmatig werk in minder dan een minuut voltooit. Nadat je dit voor de 50e keer hebt gedaan, zul je dankbaar zijn voor de paar uur die je hebt besteed om alles in elkaar te knutselen, wat uiteindelijk heeft gediend om je tijd vrij te maken voor meer waardetoevoegende bezigheden. Na een tijdje worden deze schaalbaarheidsvoordelen verslavend.


Bedrijfsfinanciering
  1. boekhouding
  2. Bedrijfsstrategie
  3. Bedrijf
  4. Klantrelatiebeheer
  5. financiën
  6. Aandelen beheer
  7. Persoonlijke financiën
  8. investeren
  9. Bedrijfsfinanciering
  10. begroting
  11. Besparingen
  12. verzekering
  13. schuld
  14. met pensioen gaan