和Word打交道,一大半的时间都花在格式。
前面博客写到,AI可以操作Word文档,那可否把调格式的事情交由 AI 来处理?
读过我前面博客的人就会知道,如果直接把目标告诉给AI而不了解AI实际的操作过程,要么目标无法实现,要么实现起来很麻烦,要么后续手动修改异常困难。
这次,我换用了先跟AI聊,问它实现我的目标它打算怎么做,然后我再根据它的建议,观察它的实现结果。并且,在这个过程中,针对它会但我不会的方法,我都会记录下来加以学习,最终我不仅学习到了新的知识,得到了一个可复用的Skill,还掌握了一套可以迁移的指导AI帮我实现目的通用方法。
我认为,整个流程对同样想要用AI操作WORD表格、固话流程为Skill、目标已有如何用AI实现等类似需求的人同样具有使用价值。
因此,我决定分享这个流程。
下文及以后多篇博客,将以让AI帮忙调整WORD表格的线条样式以实现不动手就能得到三线表、开放表、全框表的格式为例,展开讲解。
先沟通
首先,我问AI,我想要要顶端和底端有线条,第一行下方有线,以及其他长相的表格,能办到吗?
AI总结出我需要的是三线表、开放表、全框表,告诉我它能帮我实现。
行,假装知道它刚才所有概括的意思。
接着,我又问,打算怎么做。
它跑了一圈探查之后,丢给我几个结论。
第一个结论,目标能实现。
第二个结论,改表格线条这条线,MCP 走不通,只能上 python-docx 代码。
第三个结论,它主要是通过操纵表格整体、单个格子、上下左右等边框来实现。当然,AI第一次回答的时候说的是通过tblBorders、tcBorders、left\right\top\bottom等实现。
所以,很明显,听着AI思路可行还不能着急让它开始动手做,学习表格结构术语和表格类型属于才是保证产出质量的关键。
再学习
在学术语前,我还是先问了一个问题。
之前讲过 .docx 本质是个 ZIP 压缩包,里面全是 XML。MCP 工具和 python-docx 脚本都是直接写这个 ZIP,根本不碰 Word 软件。
我的第一个疑问很简单,为什么不能走不写代码的MCP呢?
MCP 为什么搞不定边框线条
AI告诉我,根据它的探测,建表、填数据、改字体,MCP够用了。但边框线条太精细,只能用python。
两层叠戴:tblBorders 和 tcBorders 的关系
第二个疑问,AI 说的那些术语是什么意思?我让它先从tblBorders、tcBorders这些听起来更底层的术语讲起。
整理得到如下笔记:
你可以把 Word 表格边框想象成两层叠戴:
第一层:表格级别 tblBorders
整张表套上的一层统一边框。就像你给表格穿了一件外套,外套规定了:顶边(top)、底边(bottom)、左边(left)、右边(right)、内部横线(insideH)、内部竖线(insideV)各自是什么样式。这层是整表统一设定。
第二层:单元格级别 tcBorders
你给某个特定单元格单独设边框。就像你给某个人单独加了个帽子或手套,覆盖掉外套对应部位的样式。这层是局部例外。
Word 的渲染规则很简单 :单元格级别写了的,就按单元格的来;没写的,就往上找表格级别的;再没有就找默认样式。所以单元格级别优先级更高。
这里是重点。因为改三线表的时候,如果你只改 tblBorders,可能会有遗漏,某些单元格如果碰巧继承了别的样式,边框还是会冒出来。最保险的做法是:先把 tblBorders 全部清成 none(脱外套),再给每个单元格分别写四条边(直接穿内衣)。这样从上到下都是你自己写的,没任何继承干扰。
left、right、top、bottom呢
AI告诉我,每个单元格有四条边,每条边三个属性
四条边
随便找一个 Word 表格,盯着某个单元格看。它有:
- top(顶边)
- bottom(底边)
- left(左边)
- right(右边)
四条边,各自独立设置。
三个属性
每条边有三个属性能控制:
- 线型 :常用的就两种,
single(实线)和nil(无线)。偶尔会有dashed(虚线) - 粗细 :单位是 pt(磅)。常用的参数:
0.75pt细实线(内部网格线用)、1.0pt中等、1.5pt粗实线(外框和强调线用) - 颜色 :通常就是
auto或black(黑色)
所以边框设置的本质就是:对每个单元格,分别指定它的 top/bottom/left/right 是什么线型、多粗、什么颜色。
四种最常见的表格样式
搞懂了术语和两层叠戴的原理,我终于敢问它说的三线表、开放表、全框表等的意思。
以下是整理出来的笔记:
1. 三线表
整张表只有三条横线有边框:
- 顶线:整张表最顶端那条线 → 粗实线(通常 1.5pt black)
- 表头下线:表头行和第一行数据之间的那条线 → 粗实线(1.5pt black)
- 底线:整张表最底端那条线 → 粗实线(1.5pt black)
其余全部设为 none,内部竖线、数据行之间的横线、表头内部的竖线,统统无线。左右外框也没有。
整个表格干干净净,没有多余的线条干扰阅读。
─────────────────────────────────────
姓名 年龄 职业 城市 工资
─────────────────────────────────────
张三 28 程序员 北京 8000
李四 32 产品 上海 10000
王五 25 设计 深圳 6500
赵六 35 运营 广州 9000
─────────────────────────────────────
2. 开放式表格
有顶底线、有内部网格线(insideH + insideV),但左右外框不封边(left=none, right=none)。
这种比全框看着清爽一点,但又比三线表信息密度高。
─────────────────────────────────────
姓名 │ 年龄 │ 职业 │ 城市 │ 工资
──────┼──────┼──────┼──────┼────────
张三 │ 28 │ 程序员│ 北京 │ 8000
──────┼──────┼──────┼──────┼────────
李四 │ 32 │ 产品 │ 上海 │ 10000
──────┼──────┼──────┼──────┼────────
王五 │ 25 │ 设计 │ 深圳 │ 6500
──────┼──────┼──────┼──────┼────────
赵六 │ 35 │ 运营 │ 广州 │ 9000
─────────────────────────────────────
注意最左边和最右边没有竖线封边,中间列之间的竖线全有,每行之间的横线也全有。
3. 全框表格
四条外框 + 内部所有网格线都是实线。最简单的做法:所有单元格的四条边都设为 0.75pt black。如果想更讲究,外框可以设粗一点(1.5pt),内部网格线细一点(0.75pt)。
┌──────┬──────┬──────┬──────┬────────┐
│ 姓名 │ 年龄 │ 职业 │ 城市 │ 工资 │
├──────┼──────┼──────┼──────┼────────┤
│ 张三 │ 28 │ 程序员│ 北京 │ 8000 │
├──────┼──────┼──────┼──────┼────────┤
│ 李四 │ 32 │ 产品 │ 上海 │ 10000 │
├──────┼──────┼──────┼──────┼────────┤
│ 王五 │ 25 │ 设计 │ 深圳 │ 6500 │
├──────┼──────┼──────┼──────┼────────┤
│ 赵六 │ 35 │ 运营 │ 广州 │ 9000 │
└──────┴──────┴──────┴──────┴────────┘
跟开放式的区别就是左右两端也用竖线封上了,四个角还有拐角。信息最全,但也最密。
最后
所以,在弄明白这些知识后,我开始为它提供了示例docx表格,让它帮我操作。
猜一猜下面会不会一遍交付呢?