json - Google App 脚本 - 使用列标题作为 JSON 键/值对中的名称

标签 json google-apps-script google-sheets firebase

我有以下代码,我将其与“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/

相关文章:

arrays - JSON 模式中的多值枚举?

json - 在 Postgres 中使用嵌套数组高效查询 JSON

google-apps-script - 复制 Google 文档模板并用作电子邮件正文

javascript - 使用“保存”按钮自动复制新工作表中的数据

google-apps-script - Google 表格 API 值批量更新,正文中的范围数量限制

java - 使用 Google Sheets/Google Drive API 请求特定文件权限

ios - 在 UITableView 中获取 JsonData

json - 在 Go 中聚合 JSON 对象

google-sheets - GSheets 论坛在领带分数上停滞不前

google-apps-script - 如何使用脚本编辑器在 Google 电子表格中获取当前时间?