Post has shared content
RangeLists are quite new to Apps Script and they allow to address non adjacent ranges as if they were one range for many of the Spreadsheet methods.
Fiddler now supports rangeLists and you can use it to generate ranges addressing column names rather than their A1 notation, so even if you don't use Fiddler for data manipulation or formatting, this feature is handy in of itself.
More details here..

http://ramblings.mcpher.com/Home/excelquirks/gassnips/fiddlerrangelists

Post has shared content
The other day I published an update to Fiddler for playing around with Header formatting. To complete the picture, here's how to format abstracted column data.

http://ramblings.mcpher.com/Home/excelquirks/gassnips/formattingcolumns

Hi Bruce, will you be releasing the Pro version of Dicers anytime soon?

Post has shared content
Finally got round to migrating GasGit to the Apps Script API, and integrate it with Clasp. Maybe you have loads of projects you want to get on Github, or want to be able to use clasp to distribute projects , even though you just use the IDE, or you want to include library code in your repo too.

I've just republished 150 public apps script projects using this new version this morning. Here you go.

Post has attachment
In one of my sheets addon project, I have a sidebar which calls a server api(getUsers) to get list of users and displays the names in the sidebar.
The server api looks for a key in properties cache and if it doesn't exist, throws up a dialog(userDetails) to get the user name. On click on Ok on the dialog, the user name is set in properties cache via a server api named setUserData.
The first time when I invoke the sidebar, the dialog(userDetails) pops up and the key is set in properties cache. For the second time there is no dialog and the name is retrieved from cache and displayed in sidebar.

Here is the code https://github.com/gdocsdev1/ClientServerSync

During the first time invocation, the server api getUsers() returns immediately after showing the dialog. What I want is... the getUsers() api should not return immediately and instead .. show the dialog, get the user details and then return the user details to client.

How do I do this? How can I ensure that the server api(getUsers) returns only after getting the user details from the dialog?

Post has attachment
I have a sample sheets addon project. On click of an addon menu('sidebar'), I am opening a sidebar (sidebar.html). Inside this html, I am invoking a server function showUserForm().
I have an array with 2 items('one' and 'two'). In showUserForm(), I add an item('three') to the array and then I show up a modal dialog(userDetails.html) to get values from user. On click on 'ok' on this dialog, I call another server function setUserData() in which I add another item('four') to the array. After the call to showModalDialog() I add another item(five) to the array.

Here is my code ... https://github.com/gdocsdev1/ClientServerSync

Due to the asynchronous nature, I see that after "three", "five" is added. I want to add 'Four' before "Five'.

Basically, I want the calls to be synchronous. i.e after I call showModalDialog(), I want to process the dialog completely and then return to the code which are written after the call to showModalDialog(). How do I achieve this?

Post has shared content
It's always been a bit of a mystery which JavaScript engine Apps Script is running on, but I've done a little research here and I'm pretty sure its Rhino v1.7r3. You'll find the analysis, plus full detail on exactly what JavaScript capabilities are supported by Rhino here.

As a by product, I discovered that Apps Script supports object setters and getters, so there's an example of using those here too.
http://ramblings.mcpher.com/Home/excelquirks/gassnips/rhinoversion

Hi Bruce,
Thank you very much for your code. I'm trying to explore your piece of code for using Execution API from VBA. I actually use Apps Script API. I only changed the method from execute to run. It works OK. If I make some small changes in Code.gs it's no problem. But at some point it stops working. When I run any code from VBA I get the following:
{
"error": {
"code": 401,
"message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"status": "UNAUTHENTICATED"
}
}
When I change Code.gs to original it works again. Do you know what can be a problem here? It looks like Google keeps the image of the scripts or something. When you make changes at some point it wants some additional authentication, but I've got no idea how to do it.

Thank you

Post has shared content
You've probably all come across times you could squeeze more into caching and property services, or maybe save images or data other than strings, or shared properties across projects, or even outside of apps script.

Here's how.

Hi,
I just found your Fiddler library and OH MY GOD it's amazing!
I run some MySql queries (JDBC) that I'd like to get into a Fiddler and was wondering if there's a simpler way of doing it. I'm basically first transferring the JDBC output to an array and then loading it into a Fiddler.

var results = stmt.executeQuery(row['Query']);
var metaData = results.getMetaData();
var columns = metaData.getColumnCount();
// Retrieve metaData to a 2D array
var values = [];
var value = [];
var element = "";
// Get table headers
for (i = 1; i <= columns; i ++) {
element = metaData.getColumnLabel(i);
value.push(element);
}
values.push(value);
// Get table data row by row
while (results.next()) {
value = [];
for (i = 1; i <= columns; i ++) {
element = results.getString(i);
value.push(element);
}
values.push(value);
}
var resultFiddler = new cUseful.Fiddler();
resultFiddler.setValues (values);
Wait while more posts are being loaded