Interactie met sheets naar scripts.
Denk eraan dat als je een access naar je sheet draait, je de eerste keer een vraag krijgt van de OAuth om toegang te geven naar je sheet.
Sheets die gebruik maken van Importrange lopen het risico om niet altijd de laatste toestand te hebben en errors te geven owv #Value #NA etc
De sheet die de data displayed is in een website moet publiek zijn, waardoor de update bewaard blijft.
Doe dit door de data in je master SS te kopiëren vanuit de import ranges naar de publieke sheet, (File>Publish to the web>"publicSheet")
var SS =Spreadsheetapp..getActiveSpreadsheet().getActiveSheet()
var data = ss.getRange(startrow, startcolumn, number of rows, number of col).getValues();
Je krijgt hierdoor een 2d array van de sheet, ook al is de col maar 1 breedt.
Indien je de formule verandert naar .getValues()[0], kan je ook een singel arry krijgen, van de eerste rij van data (titels)
Wanneer je een scheet vanuit een stand-alone of andere sheet wil openen, kan je ook gebruik maken van de URL.
Bovenstaande formule gebruikt een combinatie van de A1 notatie en de mogelijkheid om de laatste rij te detecteren.
Hierdoor wordt de A1 notatie A2:Gx en kan je deze gebruiken ipv de getalwaardes voor het tellen van de kolommen en rijen.
ss.getRange(startrow, startcolumn, number of rows, number of col).setValues(newarray);
Dynamisch door gebruik te maken van de lengte.
Op deze wijze kan je enkel 2D arrays terugschrijven.
Newarry moet dus steeds een 2d versie zijn.
ss.getRange(startrow, startcolumn, newarray.length, newarray[0].length).setValues(newarray);
Als je velden wil lezen, modificeren en terug invullen kan je dit op de volgende wijze.
Het idee is door eerst de data te lezen, toe te kennen aan een array en daarna een nieuwe array te maken (van dezelfde size) en terug te plaatsen, je de oorspronkelijke waardes overschrijft met de nieuwe.
Als je zeker wil zijn dat de waardes die gelezen worden in een col 0 ook echt als tekst worden behandeld, dan kan je de return als concat maken van een lege string (typecasting) met de rest.
Bij volgende voorbeeld gebruiken we een single col array uit de sheet.
Echter doordat getValues() steeds een 2d array geeft, kan je de rest van de code voor het terugschrijven laten en zal je enkel in de return waarde één element van het type array in een array moeten terug plaatsen
Voor interactie met een webapp of formulier kan je gebruik maken van de method appendRow zie
Dit als methode laat je toe om een for loop te maken op één lijn, zonder dat er een nieuwe array wordt terug gegeven.
Er wordt een 1d array gemaakt van de labels van de kolommen in labels.
Door gebruik te maken van de method .forEach word op iedere waarde van labels de functie toegepast.
De ForEach gebruikt als instructie intern een teller die je eventueel ook kan doorgeven aan de functie als tweede parameter. (i).
Na het uitvoeren van Write bewerkingen op een sheet, dien je alvorens terug read acties te doen, eerst zeker te zijn dat de acties zijn uitgevoerd.
Dit doe je dmv volgend commando:
SpreadsheetApp.flush()
Zie video Google Sheets - Combine All Sheets into One When Column Order Doesn't Match - Apps Script - Part 17
Met de volgende functie loop je door alle sheets die bestaan uit een 2d array waarin de eerste waarde de index is en de tweede de sheet zelf, wordt in de logger weergegeven als “sheet”).
Wil je nu de naam van de sheet weten, dan gebruik je de method: getSheetName()..