Reputation:
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
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