You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Google Sheet数据同步至GitHub的JSON文件以支持Svelte应用?

实现Google Sheet数据同步到GitHub JSON文件的方案

一、自动同步方案(Google Apps Script + GitHub API)

你可以改造现有脚本,直接将生成的JSON推送到GitHub,无需手动复制,还能触发自动同步:

  1. 准备GitHub访问令牌
    在GitHub账号的「Settings > Developer settings > Personal access tokens」生成一个令牌,勾选repo权限(确保能读写仓库),保存好令牌。

  2. 修改Google Apps Script
    替换原来弹出JSON的代码,改成调用GitHub API更新文件:

    function pushToGitHub() {
      // 1. 用你已有的逻辑生成JSON数据
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      const rawData = sheet.getDataRange().getValues();
      // 这里替换成你自己的表格转JSON函数
      const jsonContent = JSON.stringify(convertSheetToJson(rawData));
    
      // 2. 配置GitHub信息
      const repoOwner = "你的GitHub用户名";
      const repoName = "目标仓库名";
      const targetFile = "data.json"; // 仓库中要更新的JSON文件路径
      // 建议把令牌存在脚本属性中,不要硬编码
      const token = PropertiesService.getScriptProperties().getProperty("GITHUB_TOKEN");
    
      // 3. 获取文件当前SHA(GitHub更新文件必需)
      const fileInfoUrl = `https://api.github.com/repos/${repoOwner}/${repoName}/contents/${targetFile}`;
      const fetchOptions = { headers: { Authorization: `token ${token}` } };
      const fileRes = UrlFetchApp.fetch(fileInfoUrl, fetchOptions);
      const fileData = JSON.parse(fileRes.getContentText());
      const fileSha = fileData.sha;
    
      // 4. 推送更新到GitHub
      const updateUrl = `https://api.github.com/repos/${repoOwner}/${repoName}/contents/${targetFile}`;
      const updatePayload = JSON.stringify({
        message: "Sync data from Google Sheet",
        content: Utilities.base64Encode(jsonContent),
        sha: fileSha
      });
      const updateOptions = {
        method: "PUT",
        headers: {
          Authorization: `token ${token}`,
          "Content-Type": "application/json"
        },
        payload: updatePayload
      };
      UrlFetchApp.fetch(updateUrl, updateOptions);
      SpreadsheetApp.getUi().alert("数据已同步到GitHub!");
    }
    
    // 示例:表格转JSON函数(替换成你自己的逻辑)
    function convertSheetToJson(rawData) {
      const headers = rawData[0];
      return rawData.slice(1).map(row => {
        const obj = {};
        headers.forEach((header, idx) => obj[header] = row[idx]);
        return obj;
      });
    }
    

    存储令牌的方式:在脚本编辑器中点击「文件 > 项目属性 > 脚本属性」,添加键为GITHUB_TOKEN、值为你的令牌的属性。

  3. 设置自动触发
    在脚本编辑器中,点击「编辑 > 当前项目的触发器」,添加一个触发器:

    • 选择函数:pushToGitHub
    • 选择事件源:「从电子表格」
    • 选择事件类型:「编辑时」(每次有人编辑表格就触发同步),或者「时间驱动」(定时同步,比如每小时一次)

二、半自动化终端同步方案

如果不想用自动触发,可通过终端脚本手动拉取更新:

  1. 将Google Sheet的JSON做成可访问链接
    把你的Google脚本部署为Web App:

    • 脚本编辑器点击「部署 > 新建部署」
    • 类型选「Web App」,执行方式选「我」,访问权限选「任何人,甚至匿名」
    • 部署后复制生成的Web App URL
  2. 写终端同步脚本
    比如用Bash脚本(保存为sync-data.sh):

    #!/bin/bash
    # 拉取Google Sheet生成的JSON
    curl -o data.json "你的Web App URL"
    # 提交到GitHub
    git add data.json
    git commit -m "Update data from Google Sheet"
    git push origin main
    

    给脚本加执行权限:chmod +x sync-data.sh,之后协作者编辑完表格,运行./sync-data.sh就能同步到GitHub。

    也可以用Node.js写脚本,或者配置GitHub Actions定时拉取(比如每天凌晨自动运行一次同步)。

注意事项

  • GitHub令牌要妥善保管,不要分享给他人或提交到代码仓库
  • Web App更新脚本后,需要重新部署并选择「新版本」才会生效
  • 如果是多人协作,确保仓库成员有足够的读写权限

内容的提问来源于stack exchange,提问作者StephD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:30:58