在Word中快速实现同类内容应用“双行合一”格式
最近在将金瓶梅词话HTML版改编成带目录与页眉且支持交叉链接的Word文档过程中想将其中的批注处理成双行合一格式。书中共有三种批注眉批、侧批、夹批。HTML代码分别是下面这几种形式眉批span classcomment top-comment数语倔强中实含软媚认真处微带戏谑非有二十分奇妒二十分呆胆二十分灵心利口不能当机圆活如此。金莲真可人也。/span侧批span classcomment side-comment一语见血。/span夹批span classcomment pinch-comment敍述处好不扯淡在金莲又是绝正经事。/span直接将HTML源代码拷贝到Word中然后找DeepSeek生成一个宏进行处理以眉批为例Sub ConvertCommentToTwoLinesInOne() Dim doc As Document Dim regEx As Object Dim matches As Object Dim m As Object Dim rng As Range Dim content As String Dim startPos As Long Dim endPos As Long Set doc ActiveDocument Set regEx CreateObject(VBScript.RegExp) 设置正则表达式 regEx.Global True regEx.IgnoreCase True regEx.Pattern span classcomment top-comment(.?)/span 在文档文本中查找匹配 Dim docText As String docText doc.Content.Text Set matches regEx.Execute(docText) If matches.Count 0 Then MsgBox 未找到匹配的内容。, vbInformation Exit Sub End If 从后往前处理避免位置偏移 Dim i As Long For i matches.Count - 1 To 0 Step -1 Set m matches(i) 提取标签内的内容 content m.SubMatches(0) 计算标签内内容在文档中的起始位置相对于文档开头0-based m.FirstIndex 是整个匹配的起始位置 加上 span classcomment top-comment 的长度 startPos m.FirstIndex Len(span classcomment top-comment) endPos startPos Len(content) Word Range 的 Start/End 是 1-based Set rng doc.Range(Start:startPos 1, End:endPos 1) 删除整个匹配包括 span 标签只保留内容并设置双行合一 先把整个匹配替换为纯内容 Dim fullRng As Range Set fullRng doc.Range(Start:m.FirstIndex 1, End:m.FirstIndex Len(m.Value) 1) fullRng.Text content 重新获取替换后内容的 Range Set rng doc.Range(Start:m.FirstIndex 1, End:m.FirstIndex Len(content) 1) 设置双行合一 rng.TwoLinesInOne wdTwoLinesInOneEncloseInBrackets Next i MsgBox 处理完成共处理 matches.Count 处。, vbInformation End Sub宏的逻辑和功能似乎没错但是在我的Word 2016里运行的结果是眉批并没有变成“双行合一”格式。那么该怎么做如果先定义一个样式再应用到相关文字中由于双行合一无法像字体、字号那样直接定义在“样式”中所以也无法直接实现目标。不过Word的样式有“更新 XXX 以匹配所选内容”功能其中的XXX为所选择的样式名经试验先在部分文字上应用“双行合一”格式再在样式列表中选择要应用“双行合一”格式的样式名称右键点击选择“更新 XXX 以匹配所选内容”命令相关样式就会具有“双行合一”格式如图图一所以如果前面的DeepSeek的宏不起作用那么实现将该HTML文件中的批注改成双行合一格式最快捷的方法是第一步根据HTML标签的特点将相关内容应用为对应的样式例如将侧批内容span classcomment side-comment一语见血。/span应用为“侧批”样式如果相关样式不存在则创建它。完成这一步可以用VBA自动实现考虑到删除HTML标签用查找替换很容易做到所以为了简化VBA代码下面的宏没有像前面的DeepSeek的宏那样删除HTML标签因此下面的宏中相关正则表达式中的分组括号也可以不要Sub ConvertCommentToTwoLinesInOne() 先执行此宏将眉批、夹批、侧批内容分别指定对应的样式名 再在文档中修改相关内容的格式然后在样式列表中右键点击 相关样式选择“更新 样式名 以匹配所选内容” Dim doc As Document Dim regEx As RegExp Dim matches As Object Dim match As Object Dim tmpStyle As Style Dim rng As Range Dim docText As String Dim i As Long Set doc ActiveDocument docText doc.content.Text Set regEx New RegExp regEx.Global True 全局查找 regEx.IgnoreCase True 忽略大小写 1、处理眉批 1.1、设置正则表达式并查找匹配项 regEx.Pattern span classcomment top-comment(.?)/span Set matches regEx.Execute(docText) 1.2、准备眉批样式 Set tmpStyle Nothing On Error Resume Next Set tmpStyle doc.Styles(眉批) On Error GoTo 0 If tmpStyle Is Nothing Then 如果眉批样式不存在则基于正文样式创建一个字符类型的样式 Set tmpStyle doc.Styles.Add(Name:眉批, Type:wdStyleTypeCharacter) End If 1.3、从后往前处理匹配项避免位置偏移将每个匹配项设置为“眉批”样式。 On Error Resume Next If matches.Count 0 Then For i matches.Count - 1 To 0 Step -1 Set match matches(i) Set rng doc.Range(Start:match.firstIndex, End:match.firstIndex Len(match)) rng.Style doc.Styles(tmpStyle) Next i End If On Error GoTo 0 2、处理侧批 2.1、设置正则表达式并查找匹配项 regEx.Global True regEx.IgnoreCase True regEx.Pattern span classcomment side-comment(.?)/span Set matches regEx.Execute(docText) 2.2、准备侧批样式 Set tmpStyle Nothing On Error Resume Next Set tmpStyle doc.Styles(侧批) On Error GoTo 0 If tmpStyle Is Nothing Then 如果侧批样式不存在则基于正文样式创建一个字符类型的样式 Set tmpStyle doc.Styles.Add(Name:侧批, Type:wdStyleTypeCharacter) End If 2.3、从后往前处理匹配项避免位置偏移将每个匹配项设置为“侧批”样式。 On Error Resume Next If matches.Count 0 Then For i matches.Count - 1 To 0 Step -1 Set match matches(i) Set rng doc.Range(Start:match.firstIndex, End:match.firstIndex Len(match)) rng.Style doc.Styles(tmpStyle) Next i End If On Error GoTo 0 3、处理夹批 3.1、设置正则表达式并查找匹配项 regEx.Pattern span classcomment pinch-comment(.?)/span Set matches regEx.Execute(docText) 3.2、准备夹批样式 Set tmpStyle Nothing On Error Resume Next Set tmpStyle doc.Styles(夹批) On Error GoTo 0 If tmpStyle Is Nothing Then 如果夹批样式不存在则基于正文样式创建一个字符类型的样式 Set tmpStyle doc.Styles.Add(Name:夹批, Type:wdStyleTypeCharacter) End If 3.3、从后往前处理匹配项避免位置偏移将每个匹配项设置为“夹批”样式。 On Error Resume Next If matches.Count 0 Then For i matches.Count - 1 To 0 Step -1 Set match matches(i) Set rng doc.Range(Start:match.firstIndex, End:match.firstIndex Len(match)) rng.Style doc.Styles(tmpStyle) Next i End If On Error GoTo 0 MsgBox 处理完成!, vbInformation End Sub第二步通过指定样式查找到对应的内容然后选择这部分内容应用“双行合一”格式还可以实施修改文字颜色等操作如图图二说明图二第4步将“中文版式”工具误写成了“调整字符间距”工具请注意。第三步调出样式列表更新相关样式如图一。通过以上操作全文批注即都实现了双行夹批式排版。外一宏这个HTML文件中使用下面的标签实现了注音ruby鳏rtguān/rt/ruby下面的宏将这种注音在Word文档中也转换为注音Sub ConvertRubyToPhonetic() Dim doc As Document Dim regEx As RegExp Dim matches, match As Object Dim i As Long Dim rng As Range, content As String Dim phonetic As String Application.ScreenUpdating False Set doc ActiveDocument docText doc.content.Text Set regEx New RegExp regEx.Global True 全局查找 regEx.IgnoreCase True 忽略大小写 regEx.Pattern ruby(.?)rt(.?)/rt/ruby Set matches regEx.Execute(docText) On Error Resume Next If matches.Count 0 Then For i matches.Count - 1 To 0 Step -1 Set match matches(i) content match.SubMatches(0) 取文字 phonetic match.SubMatches(1) 取拼音 Set rng doc.Range(Start:match.FirstIndex, _ End:match.FirstIndex Len(match.Value)) rng.Text content 将匹配部分替换为纯内容 Set rng doc.Range(Start:match.FirstIndex, _ End:match.FirstIndex Len(content)) 重建区域 在区域中使用拼音向导 rng.PhoneticGuide Text:phonetic, Alignment: _ wdPhoneticGuideAlignmentOneTwoOne, Raise:13, FontSize:7 Next i End If On Error GoTo 0 MsgBox Done! Application.ScreenUpdating True End Sub

相关新闻

Java框架 SpringCloud 快速入门: Nacos 服务多级存储模型

Java框架 SpringCloud 快速入门: Nacos 服务多级存储模型

概述 服务注册进 Nacos 之后,一个服务往往有多个实例,这些实例如果分散在全国不同的机房,调用方该怎么选?Nacos 在「服务 → 实例」之间又插了一层「集群」,就是为了让调用尽量落在同机房。 纲要 三级结构&#xff…

2026/10/9 14:33:25 阅读更多 →
文华期货指标源码下载

文华期货指标源码下载

HH:HHV(HIGH,12); LL:LLV(LOW,12); HH1:BARSLAST((HH>REF(HH,1))); LL1:BARSLAST((LL < REF(LL,1))); DRAWTEXT(CROSS(HH1,LL1),90,众),COLORWHITE; DRAWTEXT(CROSS(LL1,HH1),90,2),COLORYELLOW; DRAWTEXT(CROSS(HH1,LL1),60,龙),COLORWHITE; DRAWTEXT(CROSS(LL1,HH1),60…

2026/10/8 6:48:47 阅读更多 →
AnyPS5:跨平台二进制重链接与ABI语义对齐技术解析

AnyPS5:跨平台二进制重链接与ABI语义对齐技术解析

1. “AnyPS5”不是PS5模拟器&#xff0c;也不是游戏破解工具——它是一套跨平台二进制重链接基础设施你搜“AnyPS5”&#xff0c;第一条结果大概率是GitHub上一个冷门但被高频误读的开源仓库。标题里带“PS5”&#xff0c;正文空空如也&#xff0c;关键词全无&#xff0c;摘要只…

2026/10/8 6:48:47 阅读更多 →

最新新闻

DEAP脑电情绪二分类实战:FFT特征提取+SVM/KNN/决策树完整流程

DEAP脑电情绪二分类实战:FFT特征提取+SVM/KNN/决策树完整流程

简介&#xff1a;面向刚接触脑电信号处理与机器学习的新手研究者&#xff0c;这份基于DEAP脑电数据集的脑电情绪二分类项目提供了从信号处理到模型训练的一站式完整流程。项目覆盖快速傅里叶变换(FFT)频域转换、滤波去伪迹与归一化等数据预处理步骤&#xff0c;并实现决策树、S…

2026/10/9 15:01:34 阅读更多 →
财经会计账务系统:从凭证到报表的业财一体实战指南

财经会计账务系统:从凭证到报表的业财一体实战指南

简介&#xff1a;财经会计账务系统是一份基于PowerBuilder 9.0开发的财务软件完整源码包&#xff0c;面向财经领域财务人员、PB开发者及需要定制账务系统的企业。系统涵盖总账、明细账、科目设置、凭证处理、报表生成、成本核算、税务处理与资产管理等模块&#xff0c;借助PB9.…

2026/10/9 15:01:34 阅读更多 →
易助ERP MSSQL数据字典:带业务语义的元数据快照

易助ERP MSSQL数据字典:带业务语义的元数据快照

简介&#xff1a;本资源是鼎捷软件易助ERP系统的MSSQL数据库字典完整集合&#xff0c;专为ERP二次开发工程师、数据库运维人员及企业信息化实施顾问设计&#xff0c;用于快速理解核心业务表结构、字段含义与模块间关联关系&#xff0c;显著提升定制化开发、数据迁移与系统集成效…

2026/10/9 15:01:34 阅读更多 →
SonarQube 7.9实战:从Docker部署到升级迁移避坑指南

SonarQube 7.9实战:从Docker部署到升级迁移避坑指南

简介&#xff1a;SonarQube 7.9 是一款面向开发团队与运维人员的开源代码质量管理工具安装包&#xff0c;用于检测漏洞、代码异味和编码规范偏差&#xff0c;帮助团队在开发早期定位并修复问题。该压缩包整体大小约 196.67MB&#xff0c;同时采用 SonarQube 服务器标准目录结构…

2026/10/9 15:01:34 阅读更多 →
微信朋友圈功能测试全攻略:从用例设计到自动化与安全验证

微信朋友圈功能测试全攻略:从用例设计到自动化与安全验证

“如何测微信的朋友圈&#xff1f;”是我在面试测试工程师时最喜欢丢出去的一道题。它不像“如何测试一个登录框”那样已经被讲烂了&#xff0c;也不像“如何测试电梯”那样需要纯逻辑发散&#xff0c;它卡在一个很微妙的位置&#xff1a;几乎每个面试者都刷过朋友圈、发过朋友…

2026/10/9 15:01:34 阅读更多 →
Oracle 11g补丁预检失败?p6880880 OPatch替换与避坑指南

Oracle 11g补丁预检失败?p6880880 OPatch替换与避坑指南

简介&#xff1a;P6880880_112000_Linux-x86-64 是甲骨文官方发布的 OPatch 11.2.0.3.15 工具安装包&#xff0c;面向 Oracle 11g 数据库运维人员与 DBA&#xff0c;用于安装或升级 Oracle 临时补丁&#xff08;Interim Patch&#xff09;&#xff0c;是后续 PSU、CPU 或单补丁…

2026/10/9 15:00:33 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题&#xff0c;隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题&#xff0c;排查到最后发现是ZonedDateTime序列化后时区丢了&#xff0c;用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问&#xff1a;办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好&#xff0c;问题是工作场景经常要在几处环境之间来回切换&#xff0c;每次都先登录跳板机再层层代理&#xff0c;实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及&#xff0c;但真正动手搭过一套能跑起来的 Agent 系统的人都知道&#xff0c;从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地&#xff0c;从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →