(发布)grid-table:一个用于 Emacs 的通用网格表格组件,支持富文本与图片渲染、公式计算、交互编辑、排序、持久化与插件扩展

grid-table 是一个用于 Emacs 的通用网格表格组件,支持富文本与图片渲染、公式计算、交互编辑、排序、持久化与插件扩展。可在 Org/Markdown 中以“静态预览 + 激活编辑”的方式嵌入。

特性

  • 富文本与图片:单元格内支持简单的 Org 风格标记与图片内联(Unicode 边框预览)。
  • 公式引擎:=B2*C2、=SUM(D2:D4)、=IF(A1>0, “Yes”, “No”) 等;支持单元格/区域引用。
  • 交互编辑:导航、编辑、插入/删除行列、列宽自适应、列排序。
  • 持久化:.grid 纯文本格式(含公式);CSV 插件读写。
  • 插件系统:CSV 数据源、Org/Markdown 静态预览,易扩展。

安装

  1. 将项目与 plugins 目录加入 load-path (add-to-list 'load-path “/path/to/grid-table”) (add-to-list 'load-path “/path/to/grid-table/plugins”)
  2. 加载核心与插件系统 (require 'grid-table) (require 'grid-table-plugins) ;; 或按需加载: ;; (require 'grid-table-csv) ;; (require 'grid-table-org) ;; (require 'grid-table-markdown)

快速开始

  • 新建:M-x grid-table-create
  • 打开 .grid:M-x grid-table-find-file
  • 保存为 .grid:在表格 buffer 中 C-c C-w 或 M-x grid-table-write-file
  • 打开 CSV:M-x grid-table-find-file-csv

常用快捷键(grid-table-mode)

  • 导航:n/p 上下,TAB/S-TAB 左右,g 刷新
  • 编辑:e 编辑单元格,C-c t 编辑标题
  • 行列:C-c r a / C-c r d 插入/删除行;C-c c a / C-c c d 插入/删除列
  • 排序:C-c s 按当前列升/降序
  • 文件:C-c C-w 保存为 .grid,C-c C-f 打开 .grid

说明:插入列在“当前列右侧”;grid-table-insert-column-left 支持左侧插入。删除第 0 行(用户自定义表头)被保护;删除末行后光标保持在表内。

公式

  • 以 = 开头:=B2*C2、=SUM(D2:D4)、=IF(A1>0, “Yes”, “No”)
  • 引用:单元格 A1,区域 A1:B5
  • 内置:SUM/AVERAGE/COUNT/MAX/MIN/IF

排序

在任意数据列上执行 C-c s,选择 ascending 或 descending 即可(用户自定义表头保持首行)。

Org 集成(special block)

  • 插入块:M-x grid-table-org-insert-block(仅需 :file)
  • 刷新预览:M-x grid-table-org-refresh-block
  • 打开编辑:M-x grid-table-org-open-block 说明:静态预览为只读;实际修改请在专用表格窗口内进行。

Markdown 集成(fenced block)

  • 插入块:M-x grid-table-markdown-insert-block
  • 刷新预览:M-x grid-table-markdown-refresh-block
  • 打开编辑:M-x grid-table-markdown-open-block 说明:静态预览为只读;实际修改请在专用表格窗口内进行。

持久化

.grid 使用 Lisp S 表达式保存:标题、用户自定义表头以及所有原始值(含公式)。

数据源 API(概览)

数据源(哈希表)常用键:

  • 读写::get-row-count、:get-column-count、:get-raw-value-at、:get-computed-value-at、:set-raw-value-at
  • 结构::add-row、:delete-row、:add-column、:delete-column
  • 其它::get-header-value、:set-header-value-at、:sort-by-column 可参考 plugins/grid-table-csv.el 实现自定义数据源并注册。

路线图

  • Provider 适配器(更稳定的 Provider 契约,兼容现接口)
  • 依赖图与增量重算、更多公式函数(如 Lookup 系列)
  • Org/Markdown 高级参数(如 :range、:width 等,可选)

许可与贡献

欢迎反馈与贡献插件/功能。若你在数据源或渲染方面有需求,欢迎提交 PR/Issue。

30 个赞

第一次在 Reddit 上发帖获得 100 个赞!

8 个赞

能不能整合进org-table呢?

EDIT: 看了下repo,完全独立的实现,楼主请忽略我的问题。

嘿嘿, Mastering Emacs 的作者也觉得这个包有点酷~

2 个赞

其实相反来说,是希望 org-mode 能够直接采用 grid-table 算了。那个难用到飞起的 org-table 没啥好的,还用了 6000 多行代码来实现,都不知道在干嘛…

2 个赞

确实,org-table可能有大神熟悉了之后觉得还好,不过对我来说,要记忆的规则和按键太多了,每次都得现用现查

1 个赞

哈哈,大佬直接给我回了个:

org-bable 方式集成应该会更好一点

1 个赞

现在不是 org-babel 的方式么?

org-mode 的主力维护者 yantar92 就在这个论坛,要不要 at 他过来看看他的意见 :grin:

最好有自己的特色 我就发现org table 不支持,也理解基于文本的很难支持

  1. 单元格合并搞不了,
  2. 不支持格子内放图片
  3. 纯文本表格直接复制到网页中(例如复制到招聘网站的纯文本输入框中),表格宽度就乱了
  4. 不同语言混合,用户要自己负责不同语言字符的宽度控制,否则不同行的列宽没法统一

我经常使用Org-table,目前有2个痛点:

  1. 表格超过窗口宽度折行,破坏表格结构。phscroll可以解决,但表格过大会卡顿。
  2. 无法跨行或者跨列合并单元格。table.el支持,但比较难用。
1 个赞

支持图片,但会出现对齐问题,用valign可以解决

我现在经常用ai帮助总结文本内容,不知道将来ai能否生成grid-table格式?

是,合并单元格我也不确定 grid-table 是否可以实现。因为涉及到公式计算,那么就会涉及到单元格的定位,grid-table 是使用了一套坐标系,如果合并单元格,暂时还不知道如何处理这个坐标系的问题。

另外,超过窗口宽度这行这种问题,都是因为 emacs 是文本处理器,基本上只能处理字符所以导致的。我觉得看问题不能脱离实际。

不清楚你的需求。

大表格的相关问题:

  • 性能如何,比如1000行* 20列的表格,里面有图片,
  • 是否支持滚动条,
  • 表头能不能固定显示?

对齐问题:

  • 中英文字的对齐问题如何?

图片插入问题:

  • 和org table一样么?
  • 能从剪切板黏贴图片进表格么?

终于看到org table升级甚至完全替换的希望了,赞一个!!!

就是ai将回复内容以grid表格格式返回回我。应该可以的。

  1. 我没严格测试过性能,如果可以,你帮我测试一下?
  2. 什么叫滚动条?目前表格大小都可以正常显示即便它超过了当前 buffer 的宽度。
  3. 表头做不到固定显示,emacs 只是一个纯文本编辑器,不要想太多。
  4. 你使用等宽字体,就不用担心中英文对齐的问题。
  5. org table 是怎么插入图片的?gird-table 只需要你输入图片的绝对路径,就可以自动解析。
  6. 不能从剪贴板粘贴图片,理由在上一条回复里。

感谢!

这个功能和 grid-table 本身好像关系不大,这应该是 AI 工具提供方的问题。

如果你是说我会不会为此开发一个 gptel 开发一个插件之类的话,我会考虑实现的可能性。