使用Google Apps脚本将Google工作表数据保存到Firebase中

时间:2018-03-29 18:18:21

标签: firebase firebase-realtime-database google-apps-script

我试图将我的Google工作表与我的firebase数据库同步。我对javaScript不是很有经验,所以可以使用下面的方法吗?这个想法是每次创建/更新/删除新行时它都会自动同步。我知道我需要脚本文件,但不知道如何在.gs文件中导入它们,这就是它在html中的原因。 非常感谢!

enter image description here

enter image description here

translate.gs

function saveToFirebase() {
  var config = {
    apiKey: "MY_API_KEY",
    authDomain: "MY_DOMAIN.firebaseapp.com",
    databaseURL: "MY_DOMAIN.firebaseio.com",
    projectId: "MY_DOMAIN",
    storageBucket: "MY_DOMAIN.appspot.com",
    messagingSenderId: "MESSAGE_ID"
  };
  firebase.initializeApp(config);
  var database = firebase.database();

  database.ref('food/' + MY_USER_UID).set({
    name: "pizza funghi",
  }); 
}

sidebar.html

<!DOCTYPE html>
<html>
  <head>
<script src="https://www.gstatic.com/firebasejs/4.12.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.12.0/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.12.0/firebase-database.js"></script>

  </head>
  <body>

  </body>
</html>

1 个答案:

答案 0 :(得分:1)

有一个third-party libarary与Firebase的REST API集成。如果你习惯使用它,这就变得非常简单了。

首先,我们需要创建一个标签来跟踪更改。我们需要进行更改的人的身份,因此我们必须将其分为两部分 - 一个简单的onEdit触发器作为修改用户运行,一个可安装的触发器,我将调用{{1} }。后者与Firebase谈判。

  1. 创建名为uploadChanges
  2. 的标签
  3. 添加包含以下标题的冻结行:
    • 上传
    • 用户
  4. Install the third party Firebase library

    1. 首先点击资源&gt;脚本编辑器中的库,然后在&#34;查找库&#34;中粘贴changes。框。点击保存。
    2. 选择最新的公开版本选择稳定性,或者选择最新版本(我在编写时选择最新版本)。
    3. 点击确定
    4. 现在是仔细阅读reference docs的好时机,以便您了解我在以下说明中所做的事情: - )
    5. 设置security(我假设你希望这个脚本像你一样运行)

      1. 使您的Google帐户(运行该脚本)至少为您的Firebase项目的编辑
      2. 为App Script项目设置适当的authorization scopes
        1. 转到文件&gt;项目属性&gt;应用程序脚本编辑器中的范围
        2. 选择查看&gt;显示清单文件(清单文件通常默认隐藏)
        3. MYeP8ZEEt1ylVDxS7uyg9plDOcoke7-2lhttps://www.googleapis.com/auth/userinfo.email添加到https://www.googleapis.com/auth/firebase.database数组中(如果它尚未添加则添加)
        4. 保存清单文件。下次运行脚本时,您会收到一个询问权限的弹出窗口。
      3. 相当于您上面的oauthScopes,它总是将您的食物设置为“披萨真菌”,如下所示:

        translate.gs

        但是你说你想在每次保存时更新Firebase。要做到这一点,你真的只想撕掉网上漂浮的各种function saveToFirebase() { var dbUrl = "MY_DOMAIN.firebaseapp.com"; // Set appropriately var token = ScriptApp.getOAuthToken(); // Depends on security setup above var firebase = FirebaseApp.getDatabaseByUrl(dbUrl, token); newData = { name: "pizza funghi", }; firebase.setData('food/' + MY_USER_UID, newData); } tutorials之一。生成的onEdit应如下所示:

        onEdit

        最后,设置一些触发器。

        1. 选择修改&gt;脚本编辑器中的当前项目触发器
        2. function onEdit(e) { // First get stuff about the edit. // This approach only gets the top left cell of a multi-cell edit. var editRange = e.range; // The edited range var newValue = editRange.getValue(); // Next, who is the editor? Remove the `split` for full email. var username = Session.getActiveUser().getEmail().split('@')[0]; if (username == '') { username = SOME_REASONABLE_DEFAULT; // Or give up if you wish } // Finally save the change SpreadsheetApp.getActiveSpreadsheet() .getSheetByName('changes') .appendRow([false, username, newValue]); } function uploadChanges() { // Attach to Firebase var dbUrl = "MY_DOMAIN.firebaseapp.com"; // Set appropriately var token = ScriptApp.getOAuthToken(); // Depends on security setup above var firebase = FirebaseApp.getDatabaseByUrl(dbUrl, token); // Get content of changes tab var changeSheet = SpreadsheetApp.getActiveSpreadsheet() .getSheetByName('changes'); var changeData = changeSheet.getDataRange() .getValues(); // Upload all new-to-us changes for (var i = 1; i < changeData.length; i++) { if (changeData[i][0]) { continue; // We already uploaded this one } changeData[i][0] = true; // Optimistically assume we'll succeed var newData = { name: changeData[i][2] }; var username = changeData[i][1]; firebase.setData('food/' + username, newData); } // Blanket update of change-data sheet to update upload status changeSheet.getRange(1, 1, changeData.length, changeData[0].length) .setValues(changeData); } 添加新触发器
          • 从最左侧运行下拉列表
          • 中选择onEdit
          • 事件下拉列表
          • 中选择onEdit
          • 然后在最右边的下拉列表中选择From spreadsheet
        3. On edit添加新触发器
          • 从最左侧运行下拉列表
          • 中选择uploadChanges
          • 运行下拉列表
          • 中选择uploadChanges
          • 设置适合您需求的时间表
        4. 编辑:我原来的脚本让你在Time-driven中做了所有事情,tehhowch正确地指出,因为我们正在与另一项服务交谈,所以不会工作。我已更新,以便进入&#34;更改&#34;我在设置中包含的标签。我的新方法保留了旧上传的永久记录;为了提高性能,您可以选择在完成上传后清除onEdit表单。