user13936120
user13936120

Reputation:

Appscript: Add data from Google Spreadsheets to Firebase RealtimeDB node

Im trying to add data from google's sheets to firebase. This is my spreadsheet and this is what im trying to achieve -> RealtimeDb

This is what i have done so far, but it creates new node Items and put only the values without their names. Like

What it does --> Items >0

1: 'name of the product'

2: 'product barcode'..etc

------------------

What i want --> Items > examplebarcode :

itemname : 'radeonRX'

itembarcode: '234523523523'


var secret = '...'

function getFirebaseUrl(jsonPath) {
  return (
    'https://inventory.firebaseio.com/Items' +
    jsonPath +
    '.json?auth=' +
    secret
  )
}

function syncMasterSheet(excelData) {
 
  var options = {
    method: 'put',
    contentType: 'application/json',
    payload: JSON.stringify(excelData)
  }
  var fireBaseUrl = getFirebaseUrl('Items')

  UrlFetchApp.fetch(fireBaseUrl, options)
}

function startSync() {
  //Get the currently active sheet
  var sheet = SpreadsheetApp.getActiveSheet()
  //Get the number of rows and columns which contain some content
  var [rows, columns] = [sheet.getLastRow(), sheet.getLastColumn()]
  //Get the data contained in those rows and columns as a 2 dimensional array
  var data = sheet.getRange(1, 1, rows, columns).getValues()

  syncMasterSheet(data)
}

Upvotes: 1

Views: 158

Answers (1)

Wicket
Wicket

Reputation: 38160

Paraphrasing the question: The startSync function is passing an Array of Arrays but it should pass an Array of Objects.

You could use something like this:

/**
 * Converts an Array of Arrays into an Array of Objects
 *
 * @param {Array[]} values Array of Arrays. First "row" has column headers to be used as object keys
 * @return {Array}
 */
function objectise(values) 
  var keys = values[0]; // Column headers will be used as Object keys.
  var arr = values.map(function(row){
    var obj = {};
    keys.forEach(function(key,i){
       obj[key] = row[i];
    });
    return obj;
  });
}

Note: You might want to "normalize" the column headers to camel style or something similar

Related

Upvotes: 1

Related Questions