These Data Manipulation Classes have been migrated from VBA so that the Google Docs spreadsheet data can be abstracted from its physical location in the same way as most of the projects on this site abstract data from Excel. This is not the best way to deal with data in Apps Script, but is provided in case you want to migrate from their equivalent in Excel.
Once these have been migrated, then I have a platform to both migrate projects from Excel, but also I can feasibly dual maintain an Excel and a VBA version going forward. The key thing is that the specifics of data access and navigation is abstracted away from the main project code and dealt with by the respective classes. You’ll see from the examples below that this abstraction allows the javaScript and VBA to be almost the same as each other. You can find the code (its a work in progress) and test data in the VBA to Google Apps Script Roadmapper project download
Examples
You may already be familiar with these classes if you are a regular visitor to this site. You can find the VBA details here. The Google Script versions are pretty much the same, with a few minor differences where I couldn’t get javaScript and VBA behavior to be exactly the same. The complete code (work in progress) can be found here – Google Apps Script Roadmapper code The best way to illustrate is to compare javaScript and VBA ways of doing the same thing
Populating a dataset
javaScript
var ds = new cDataSet(); ds.populateData(wholeSheet("inputdata"));
VBA
dim ds as new cDataSet; ds.populateData wholeSheet("inputdata")
Create a collection of datasets with various attributes
javaScript
var dSets = new cDataSets(); dSets.create(); dSets.init(rData,undefined , "data"); dSets.init(rParam,undefined ,undefined , true, "roadmap colors"); dSets.init(rParam,undefined ,undefined , true, "containers"); dSets.init(rParam,undefined ,undefined , true, "options"); dSets.init(rParam,undefined ,undefined , true, "custom bars");
VBA
Set dSets = New cDataSets With dSets .create .init rData, , "data" .init rParam, , , True, "roadmap colors" .init rParam, , , True, "containers" .init rParam, , , True, "options" .init rParam, , , True, "custom bars" End With
Enumerating each row in a dataset
javaScript
dSets.dataSet("data").rows().forEach( function (dr,drItem) { // do something with each dr (the cDataRow) or drItem (the item number of each row) } );
VBA
With dSets.dataSet("data") ' create for each datarow For Each dr In .rows ' do seomthing with dr ( the cDataRow) Next dr End With
Accessing a single cell in a dataset by key and converting it to a string javaScript
dSets.dataSet("options").cell("frameplot", "value").toString();
VBA
dSets.dataSet("options").cell("frameplot", "value").toString
Transitioning is covered more comprehensively in my book, Going Gas – from VBA to Apps script.
You can find the latest complete code for cDataSet and related classes in the mcpher library
Summary
Take a look at how the From VBA to Google Apps Script for more like this. Why not join our forum, follow the blog or follow me on twitter to ensure you get updates when they are available.