ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Grist 完整指南:一条命令跑起来的关系型电子表格

Grist 完整指南:一条命令跑起来的关系型电子表格 Grist 完整指南一条命令跑起来的关系型电子表格【免费下载链接】grist-coreGrist is the evolution of spreadsheets.项目地址: https://gitcode.com/GitHub_Trending/gr/grist-core周五傍晚同事发来一份 3000 行的 Excel两列长得几乎一样的名字一列里日期和文本混着写跨表核对全靠手抄。打开 Grist 这个开源的关系型电子表格你可以用数据库的方式接住这类数据每一列都有名字和类型表与表之间用引用关联公式改动后自动重算。Grist 把电子表格的易上手和数据库的结构约束放在同一个单文件文档里。先弄清它是什么表格里套了一台数据库Grist 官方对自己的定义是 a modern relational spreadsheet——把电子表格的灵活和数据库的严谨合在一起。和 Excel 最大的区别在两处列像数据库字段一列只装一种数据有名字、有类型日期、货币、附件、引用、选择列表等单元格可以写公式公式列在引用变化时自动更新和电子表格一样实时。所以它同时具备两边的长处像表一样直接敲键盘录入像库一样保证结构不乱。Grist 的计算和存储是分离的单个文档的工作机制两个设计细节值得记住公式用Python写标准库可用也内置了一批 Excel 风格函数文档格式.grist底层就是SQLite任何 SQLite 工具都能直接读里面的数据。这意味着备份、归档、迁移到别的服务器本质上就是拷一个文件。一条命令部署五分钟建出第一个看板装 Docker 后一条命令即可启动docker run -p 8484:8484 -v $PWD/persist:/persist -it gristlabs/grist文档存在挂载进容器的/persist目录里。浏览器打开http://localhost:8484首次启动会进入 Quick setup 页面让你选管理员邮箱和登录方式启动密钥boot key打印在容器日志里用于登录/admin管理面板。个人使用图省事可以设GRIST_DEFAULT_EMAIL点登录就自动以这个身份进入。生产环境建议加上三个开关docker run -p 8484:8484 -v $PWD/persist:/persist \ -e GRIST_SANDBOX_FLAVORgvisor \ -e GRIST_FORCE_LOGINtrue \ -e GRIST_MAX_PARALLEL_REQUESTS_PER_DOC20 \ -it gristlabs/gristGRIST_SANDBOX_FLAVORgvisorLinux 上把文档里的 Python 代码关进 gVisor 沙箱执行防不受信任的公式代码macOS 用macSandboxExec跨平台兜底方案是pyodideGRIST_FORCE_LOGINtrue关掉匿名访问所有文档必须先登录GRIST_MAX_PARALLEL_REQUESTS_PER_DOC限制单个文档的并发 API 请求数默认 10。上图是 Grist 官方文档里的多服务器部署形态负载均衡把浏览器请求分给 Home Server管用户、组织和 Doc Worker每个文档独立开一个文档数据落盘 SQLite快照存到 S3 兼容对象存储Redis 缓存会话和查询。单条 Docker 命令只是把这套架构缩到了一台机器上。接下来按四步建第一个文档新建空白文档把默认表重命名比如Tasks点列头右侧的加号加列选类型Status选 Choice List可给每个选项配颜色标签Due选 DateHours选 Number新建第二张表Projects回到Tasks加一列类型选 Reference指向Projects——之后填表时下拉选项目关系不用再手工维护左侧页签新建一页从页面部件里拖出 Summary 表按 Status 计数和 Card 视图按 Due 分组点击图表里的某个分组其他部件联动筛选。所有视图共享同一份数据不复制、不会各看各的。左侧工具栏里还有 Access Rules、Raw Data、Document History 等入口后面会用到。用它解决两个真实问题公式列算库存告别手工盘点痛点SKU 表里当前库存靠人工维护出入库流水记在另一张表想知道哪个货要补货每周得手工对一遍。Grist 的落地方式两张表 两个公式列。Inventory表放Sku、MinStockMovements表放Sku、Date、Qty入库为正、出库为负。在Inventory里加公式列Availabletotal 0 for r in doc.Movements: if r.Sku $Sku: total r.Qty return $BaseStock total再加分组筛选按Sku过滤每行的Available就自动算出该 SKU 的实时库存MinStock一改整列立刻重算。接着加一列布尔公式Low $Available $MinStock再给这列套条件格式低于安全库存的行自动标红。顺带一提Grist 把每次单元格修改都记在内置的 ActionLog 表里谁在什么时间改了什么回看文档历史即可不用自己写审计代码。引用关系拼出客户 360° 视图痛点销售看一个客户要开三个窗口——客户表、订单表、沟通记录来回切换拼上下文。落地方式建Customers、Orders、Notes三张表Orders.Customer建为指向Customers的引用列勾选双向引用two-way reference两边自动同步。客户表里加两个公式列sum(r.Amount for r in doc.Orders if r.Customer_id $__system_id)max(r.Date for r in doc.Notes if r.Customer_id $__system_id)第一列算客户累计订单额第二列算最近一次跟进日期。最后做一页 Card 视图按最近跟进日期排序——谁该跟进、谁贡献大一屏看完。这就是关系型表格的核心收益数据只存一份视角随便拼。选 Grist 还是别的工具维度GristExcel / Google SheetsAirtablePostgreSQL数据结构类型化列 表间引用无约束靠自觉类型化列 引用完整关系模型公式Python 标准库 Excel 风格函数各有一大套函数基础函数需 SQL行级权限行/列/表三级规则无工作区级应用层自理自托管单文件即可跑桌面/云端不支持可以许可Apache 2.0订阅制订阅制开源选型一句话如果你想要数据库的约束但不想维护独立后端且团队会写一点点 PythonGrist 是这几类工具里少见的一个文件全都有的方案。运维上只记三条认证多人使用或暴露到公网前先配好登录GRIST_DEFAULT_EMAIL只适合单机自用生产环境应关掉并接入统一身份源沙箱文档里的 Python 公式默认跑在服务进程环境里对外部来源的文档务必开启沙箱见上面部署命令性能GRIST_ACTION_HISTORY_MAX_ROWS默认 1000控制动作历史长度多文档集群用REDIS_URL接 Redis 缓存会话与查询。完整变量表见仓库根目录的 README.mdPython 引擎源码在 sandbox/grist/。你可能想问的三个问题为什么首次启动要输一个密钥全新部署会进入 Quick setup 引导你设置管理员邮箱与登录方式boot key 打印在容器日志里也是登录/admin管理面板的凭证。如果只想快速试用、跳过引导设GRIST_IN_SERVICEtrue即可。现有数据怎么搬进来文档直接导入 CSV 和 Excel 文件也支持从 Airtable 拉取再导入同一份 CSV 时做增量合并只更新或新增记录不产生重复行。开源协议和付费版是什么关系这个仓库grist-core是 Apache 2.0 开源的上面提到的功能全部包含在内Grist Labs 另外提供带高级 SSO、自动化、审计日志等功能的完整版年融资额 100 万美元以下的小型组织可免费启用。继续往下走官方文档自托管指南、公式参考documentation/部署示例Postgres Redis MinIOdocker-compose-examples/grist-with-postgres-redis-minio/模板库 templates.getgrist.com、社区论坛 community.getgrist.com项目由 Grist Labs纽约开发法国政府数字部门参与了大量贡献grist-core、grist-desktop、grist-static三个仓库均为 Apache 2.0 协议。【免费下载链接】grist-coreGrist is the evolution of spreadsheets.项目地址: https://gitcode.com/GitHub_Trending/gr/grist-core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进