我有以下代码,我将其与“FireBaseApp Library Resource”一起使用来更新 FireBase。
function writeDataToFirebase() {
var ss = SpreadsheetApp.openById(".......mySheetRef.........");
var sheet = ss.getSheets()[0];
var data = sheet.getDataRange().getValues();
var dataToImport = {};
for(var i = 1; i < data.length; i++) {
var EventName = data[i][0];
var Description = data[i][1];
dataToImport[EventName] = {
EventName:EventName,
Description:Description,
EmailAddress:data[i][2],
who:data[i][4],
client:data[i][5],
partners:data[i][6],
EventDate:data[i][7]
};
}
var firebaseUrl = "https://myFireBase.firebaseio.com/";
var secret = "secret_here";
var base = FirebaseApp.getDatabaseByUrl(firebaseUrl, secret);
base.setData("", dataToImport);
}
一切都完美,除了......
为了增加项目的可扩展性,我想动态添加第 1 行列标题中的键“名称”。因此,如果列名称更改或添加更多列,则不需要每次都重新编写脚本。
所以,而不是硬编码......
EmailAddress:data[i][2],
I would like
"row 1 column header value":data[i][2],
我似乎无法让这一点发挥作用:-(
非常感谢任何帮助。
更新: 我尝试添加....
-> var Headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
Logger.log(Headers);
var dataToImport = {};
for(var i = 1; i < data.length; i++) {
var EventName = data[i][0];
var Description = data[i][1];
dataToImport[EventName] = {
EventName:EventName,
Description:Description,
-> Headers[2]:data[i][2],
who:data[i][4],
client:data[i][5],
partners:data[i][6],
EventDate:data[i][7]
};
}
但这会产生“缺少:属性 ID 之后。”错误!
所以我仍在寻找一种动态捕获列标题值的方法。
最佳答案
以下代码可能适合您,就像适合我一样,具有任何列配置。您需要分配唯一的列标题(在下面的示例中是唯一的)
var sheetsid = "your-google-sheet-id-here";
var fbpath = "https://your-app-here.firebaseio.com/fromsheet";
var fbsecret = "your-secret-here";
function sheet2FB() {
var sheetname = "Data";
var sheet = SpreadsheetApp.openById(sheetsid).getSheetByName(sheetname);
var uniquecolumn = "unique";
var objectsarray = xsLibSheets.getRows(sheet);
var fbready = objectsarray.reduce(function(p,v){ p[v[uniquecolumn]] = v; return p; }, {});
var fb = FirebaseApp.getDatabaseByUrl(fbpath, fbsecret);
fb.setData("", fbready);
Logger.log(JSON.stringify(fbready,null,2));
return;
}
函数 getRows() 使用标题作为键从工作表中获取数据作为 json 对象数组。 您可以找到图书馆代码on this link
关于json - Google App 脚本 - 使用列标题作为 JSON 键/值对中的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34734159/