如何将Google Sheet数据同步至GitHub的JSON文件以支持Svelte应用?
实现Google Sheet数据同步到GitHub JSON文件的方案
一、自动同步方案(Google Apps Script + GitHub API)
你可以改造现有脚本,直接将生成的JSON推送到GitHub,无需手动复制,还能触发自动同步:
准备GitHub访问令牌
在GitHub账号的「Settings > Developer settings > Personal access tokens」生成一个令牌,勾选repo权限(确保能读写仓库),保存好令牌。修改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、值为你的令牌的属性。设置自动触发
在脚本编辑器中,点击「编辑 > 当前项目的触发器」,添加一个触发器:- 选择函数:
pushToGitHub - 选择事件源:「从电子表格」
- 选择事件类型:「编辑时」(每次有人编辑表格就触发同步),或者「时间驱动」(定时同步,比如每小时一次)
- 选择函数:
二、半自动化终端同步方案
如果不想用自动触发,可通过终端脚本手动拉取更新:
将Google Sheet的JSON做成可访问链接
把你的Google脚本部署为Web App:- 脚本编辑器点击「部署 > 新建部署」
- 类型选「Web App」,执行方式选「我」,访问权限选「任何人,甚至匿名」
- 部署后复制生成的Web App URL
写终端同步脚本
比如用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
相关产品推荐
相关产品推荐

