Skip to content

Instantly share code, notes, and snippets.

@karlgluck
Last active March 7, 2017 22:54
Show Gist options
  • Save karlgluck/c3b1a7ac64eff1101b7902b85e9c02cf to your computer and use it in GitHub Desktop.
Save karlgluck/c3b1a7ac64eff1101b7902b85e9c02cf to your computer and use it in GitHub Desktop.
Easy way to make a key-value store in a Google Spreadsheet. Just publish as a webapp and use jsonp.
function doGet(request)
{
var lock = LockService.getPublicLock();
lock.waitLock(15000);
var ss = SpreadsheetApp.openById(request.parameter.id);
var sheet = ss.getSheetByName('Sheet1');
var obj;
var dataRange = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());
var dataValues = dataRange.getValues();
if (request.parameter.k && request.parameter.v) {
var key = request.parameter.k.toString(), value = request.parameter.v.toString();
for (var i = 1; i < dataValues.length; ++i) {
if (dataValues[i][0] == key) {
sheet.getRange (1+i, 2).setValue(value);
key = null;
}
}
if (key !== null) {
sheet.appendRow([key, value]);
}
obj = {'status':'ok'};
} else {
obj = [];
for (var i = 1; i < dataValues.length; ++i) {
obj.push ({
'k': dataValues[i][0],
'v': dataValues[i][1]
});
}
}
lock.releaseLock();
return ContentService
.createTextOutput(request.parameters.callback+'('+JSON.stringify(obj)+')')
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
// This is free and unencumbered software released into the public domain.
//
// Anyone is free to copy, modify, publish, use, compile, sell, or
// distribute this software, either in source code form or as a compiled
// binary, for any purpose, commercial or non-commercial, and by any
// means.
//
// In jurisdictions that recognize copyright laws, the author or authors
// of this software dedicate any and all copyright interest in the
// software to the public domain. We make this dedication for the benefit
// of the public at large and to the detriment of our heirs and
// successors. We intend this dedication to be an overt act of
// relinquishment in perpetuity of all present and future rights to this
// software under copyright law.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
//
// For more information, please refer to <http://unlicense.org/>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment