Giter Club home page Giter Club logo

sheetsdb's Introduction

The code reads data from Google spreadsheet into JavaScript Objects AND writes data from JavaScript Objects to the spreadsheet.

Examples

Spreadsheet with data table and attached script https://docs.google.com/spreadsheets/d/1x2OYeMHHRpNaDMgRzOhqa4m5rbQXN7lcPG1GprVtRTI/edit

Apps scrtipt project with the code https://script.google.com/d/1eAGteVN9UsYwqMbFTaUufhxMTMix8LPbcb1R2OdspaCbiuCT-XPLK5uj/edit

How to include SheetsDB into your project

To include SheetsDB as library into your Google apps script project use the next Script Id

1gsvjRca2mBA3yjy9fbWeenKVyAK6gEwj-AkBIyFyZZTbqC2BB9e_WwS-

Spreadsheet requirements

Spreadsheet should be owned or granted view (to read) or edit (to write) access.

All cells recommended to be formatted as plain text.

Sheet's first row is for column headers. Column header may contain white spaces and should be unique. First digit in the header will be ignored. For example, "First name" header transforms to "firstName" key, "1 title whatever" โ†’ "titleWhatever", "Timestamp" โ†’ "timestamp". Columns without headers within the data table range are ignored. Empty rows are ignored as well.

Data types

Data in each column is converted to the specified data type, if the type conversion declared for the column. Default type for reads and writes is string.

Codes used in the type declaration:

  • N - number,
  • S - string,
  • O - object,
  • A - array,
  • D - date.

Example type declaraion:

var types = {
  sheetNameOrId: {
    "Column 1": "N",
    "Column 2": "S",
    "Column 3": "O",
    "Column 4": "A",
    "Column 5": "D"
  }
};

Custom type converters are allowed as function with value and isWrite arguments. value - value to convert, isWrite - defines, if it's write (true) or read (false) operation.

function customConverter(value, isWrite) {
    var result;
    if(isWrite) {
        result = JSON.stringify(value);
    } else {
        result = parseInt(value);
    }
    return result;
}

var types = {
  sheetNameOrId: {
    "Column 1": customConverter,
  }
};

API

SheetsDB.connect(source, types) - creates connection to the spreadsheet, source is required and can be an URL to a spreadsheet or a spreadsheet, types is optional.

SheetsDB.isConnection(connection) - checks if connection is an instansce of Connection.

SheetsDB.isTable(table) - checks if table is an instance of Table.

Connection.spreadsheet() - returns connected spreadsheet.

Connection.getSheetRefs() - returns an array of the sheet names and ids of the connected spreadsheet.

Connection.timeZone() - returns the time zone for the spreadsheet.

Connection.table(ref, types) - returns instance of Table, ref is required and should be the name or the ID of a sheet, types are optional, but if defined, table instance will use it to convert the data, types defined in this method, do not overwrite global types definition and affects only created Table instance.

Use of the sheet id instead of the name to refer is recommended.

Connection.getStorageLimit() - returns amount of cells allowed in the Google spreadsheet app.

Connection.getStorageUsed() - returns amount of cells used in the connected spreadsheet.

Connection.optimizeStorage() - removes unused (empty) cells in all sheets in the connected spreadsheet.

Table.get() - reads all data from the table and returns array of objects.

Table.set(data) - writes the data to the table.

Table.append(data) - appends the data to the table.

Table.clear() - removes all the data from the table.

Table.sheet() - returns connected sheet.

Table.types() - returns types object defined for the current table instance.

Table.keys() - return keys of the table.

Table.getStorageUsed() - returns amount of cells used in the sheet.

Table.optimizeStorage()- removes unused (empty) cells in the sheet.

Usage

//Example spreadsheet https://docs.google.com/spreadsheets/d/1x2OYeMHHRpNaDMgRzOhqa4m5rbQXN7lcPG1GprVtRTI/edit

//Scenario with sheet names

var types = {
  Sheet1: {
    "Column 1": "N",
    "Column 2": "S",
    "Column 3": "O",
    "Column 4": "A",
    "Column 5": "D",
    "Column 6": function(value, write) {
      //custom converter
      return value + Number(write);
    }
  }
};

var spreadsheetURL = "https://docs.google.com/spreadsheets/d/1x2OYeMHHRpNaDMgRzOhqa4m5rbQXN7lcPG1GprVtRTI/";
var connection = SheetsDB.connect(spreadsheetURL, types);
var data = connection.table("Sheet1").get();
connection.table("Sheet1").set(data);

//  OR

var sheet1 = connection.table("Sheet1");
var data = sheet1.get();
sheet1.set(data);

// AND

sheet1.append(data);
data = sheet1.get();

//Check instances

SheetsDB.isConnection(connection); //true
SheetsDB.isTable(sheet1); //true

//Scenario with sheet IDs

var types = {
  "0": {
    "Column 1": "N",
    "Column 2": "S",
    "Column 3": "O",
    "Column 4": "A",
    "Column 5": "D",
    "Column 6": function(value, write) {
      return value + Number(write);
    }
  }
};

var connection = SheetsDB.connect(spreadsheetURL, types);
var data = connection.table(0).get();

//OR

var data = connection.table("Sheet1").get();
Logger.log(JSON.stringify(data));

//Log
/*
 [
  {
    "column1": 1,
    "column2": "a",
    "column3": {
      "a": 1
    },
    "column4": [
      "1",
      "2",
      "3",
      "4",
      "5"
    ],
    "column5": "2017-01-23T12:30:28.711Z",
    "column6": "70"
  },
  {
    "column1": 2,
    "column3": {
      "a": 2
    },
    "column4": [
      "1",
      "2",
      "3",
      "4",
      "5"
    ],
    "column5": "2017-01-23T12:30:28.711Z",
    "column6": "a0"
  }
 ]
*/

sheetsdb's People

Contributors

harunou avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.