Word 里 Ctrl+V 丢颜色和字号?不是数据丢了,是默认设置变了
2026-10-27
几个月前,我们发布了 RDP Clipboard Anchor。它是一款剪贴板历史工具,专长在远程桌面场景:在 RDP 会话里复制的内容,会被它缓存锚定在本地,连接断开也不丢,随时可以拖拽出来用。它的历史列表是围绕这个桥接场景设计的。
今年 5 月,有用户在 feedback 仓库提了一条需求,希望剪贴板历史能做分类,常用的条目可以收藏起来。分类和收藏是通用剪贴板管理的需求,超出了一个 RDP 桥接工具的范围,它实际上指向另一款产品:面向本地日常使用的剪贴板管理器。我们在这个方向上立项了 ClipLab。
然后在测试的时候,撞上了这篇文章要说的问题。
说不通的现象
在 Word 里复制一段带颜色、字号、粗体、斜体的文本,中途剪贴板被别的内容覆盖,再从 ClipLab 的历史里把那条记录找出来贴回 Word。颜色和字号没了,粗体和斜体还在。
第一个怀疑对象是我们自己:数据在存入的时候丢了一部分,或者写回去的时候丢了一部分。剪贴板管理工具的本职就是把内容原样存起来、原样还给你,做不到就是 bug。
于是我们先把整条链路的数据查了一遍。
先确认数据还在不在
Windows 剪贴板允许同一个内容以多种格式并存。Word 复制一段文本时,会同时放上去十几个格式:Rich Text Format、HTML Format、纯文本,还有一堆 OLE 原生格式(Embed Source、Native 之类)。
我们写了个探针脚本,用裸 Win32 API(OpenClipboard / GetClipboardData)把每个格式的原始字节逐个抓下来,算好哈希存档,然后做了三步对照。
第一步,复制之后从工具的数据库里把存的字节取出来,和剪贴板上的原始字节比。HTML Format 逐字节一致。
第二步,清空剪贴板,让工具把那条记录写回去,再用探针抓一次。哈希对上,还是逐字节一致。
第三步,绕开工具,用探针把 Word 最初的原始字节直接放回剪贴板,去 Word 里贴。
第三步依然丢颜色。数据一个字节都没少,Word 还是那个贴法。
Word 的四个粘贴选项
数据没问题,接下来看 Word 的行为。右键粘贴时能看到 Word 的四个粘贴选项,逐个试下来规律很清楚:
| 粘贴选项 | 颜色/字号 | 粗体/斜体 |
|---|---|---|
| 保留源格式 | ✅ | ✅ |
| 使用目标主题 | ✅ | ✅ |
| 合并格式 | ❌ | ✅ |
| 只保留文本 | ❌ | ❌ |
数据是完整的,Word 完全有能力原样贴出来,只要显式点"保留源格式"。但普通 Ctrl+V 时 Word 自己做了主,走"合并格式":保留粗斜体,丢掉字体、颜色、字号、字族。和我们的现象对上了。
那 Word 凭什么决定默认走哪个?我们做了几轮排除。先是数据角度:把 Word 复制时的全部 16 个格式(包括 Embed Source、Native 等 OLE 原生格式)逐字节抓下来、原样回放,照丢;只放 RTF、只放 HTML,也都一样。再是来源角度:剪贴板会记录一个"所有者",而 Windows 并不校验 OpenClipboard 传入的窗口句柄属于谁,于是我们直接传 Word 主窗口的句柄,回放全部格式,再用 GetClipboardOwner 确认所有者已经是 Word 自己的窗口。普通 Ctrl+V,还是合并格式。
中间还绕了段弯路:先怀疑是 RTF 少了惯例的 NUL 结尾,补齐再贴,照丢;想拿写字板做个对照,发现 Win11 已经把写字板删了,改成把 RTF 存成文件直接用 Word 打开,格式是全的。
到这里方向已经明确:数据、来源能试的都试遍了,Word 还是一律合并格式。这不是数据问题,是 Word 对"其他程序来的内容"既有的处理策略。至于它靠什么区分自家和外来内容,我们没有继续深挖,好在对结论没有影响。
真正的开关是一个设置
这个策略落在一个用户可见的设置上:文件 → 选项 → 高级 → 剪切、复制和粘贴 →「从其他程序粘贴」。
2024 年 5 月,Word 团队在 Microsoft 365 官方博客公告了 Word 2405 版的这次默认值变更:「从其他程序粘贴」从"保留源格式"改成"合并格式"。也就是说我们什么都没配错,装完 Word 就是这样:凡是被归入"其他程序"的内容,任何第三方工具写回的都算,Ctrl+V 一律降级。
怎么办
- 改 Word 设置(推荐):文件 → 选项 → 高级 → 剪切、复制和粘贴,把「从其他程序粘贴」改回"保留源格式",一劳永逸。这是用户自己的偏好,不该由工具越俎代庖。
- 右键粘贴:不改设置的话,右键菜单里显式选"保留源格式",每次多一下点击。
- 工具侧无解,也不该解:所有剪贴板管理器在默认配置下都会触发同样的降级。数据已经做到了字节级忠实,再往上就得伪装成 Word 本尊。那不是粘贴增强,是伪装攻击。