无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 306|回复: 9
打印 上一主题 下一主题

[讨论] 恭请高手帮忙优化Word自动标注拼音的VBS脚本

  [复制链接]
跳转到指定楼层
1#
发表于 昨天 17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 subrc 于 2026-3-11 23:36 编辑

  1. Option Explicit
  2. Sub PinYin_New()
  3. 'Word自动标注拼音:格式-中文版式-拼音指南
  4. 'Word格式:必须为纯文本格式:无格式文本/无格式的Unicode文本
  5. '标注原理:模拟运行Word内置宏"FormatPhoneticGuide"
  6. '注意事项:运行期间,拼音指南窗口频繁闪烁,请耐心等待脚本运行完毕,中途请勿切换窗口
  7. '汉字范围的扩展:
  8. '常用范围:\u4e00-\u9fa5(约2万多汉字)--[一-龥]
  9. '扩展范围:\u3400-\u4dbf(扩展A区)和 \u4e00-\u9fff(更完整的常用区)
  10. '大多数情况下,使用 \u4e00-\u9fa5 或 [一-龥] 就足够了
  11. '变量声明(全部显式声明,调整类型为 Long 避免溢出)
  12.     Dim Block             As String
  13.     Dim Ch                As String
  14.     Dim CharCount         As Long
  15.     Dim CnCount           As Long
  16.     Dim CursorPos         As Long
  17.     Dim DocRange          As Range
  18.     Dim FullText          As String
  19.     Dim HasChinese        As Boolean
  20.     Dim Hz_Font           As String
  21.     Dim Hz_hps0           As String
  22.     Dim Hz_Size           As String
  23.     Dim I                 As Long
  24.     Dim J                 As Long
  25.     Dim LastChar          As String
  26.     Dim Loops             As Long
  27.     Dim Num               As Long
  28.     Dim Py_Font           As String
  29.     Dim Py_jc00           As String
  30.     Dim Py_Size           As String
  31.     Dim Rng               As Range
  32.     Dim Speed             As Single
  33.     Dim SubLength         As Long
  34.     Dim Time0             As Single
  35.     Dim Time1             As Single
  36.     Dim Time2             As Single

  37. '设置拼音格式:字体=等线/字号=8/对齐方式=居中
  38.     Hz_Font = "楷体"                                       '汉字字体
  39.     Py_Font = "等线"                                       '拼音字体
  40.     Hz_Size = "22"                                         '汉字字号=二号(22磅)
  41.     Py_Size = "hps16"                                      '拼音域代码字号=hps16(8磅)
  42.     Hz_hps0 = "hps" & Hz_Size                              '汉字域代码字号=hps22(22磅)
  43.     Py_jc00 = "jc0"                                        '拼音对齐=jc0(居中)

  44. '设置全文字体字号:字体=楷体,字号=二号(22磅)
  45.     Selection.HomeKey Unit:=wdStory                        '移动光标到全文开头
  46.     Selection.WholeStory                                   '全选
  47.     Selection.Font.Name = Hz_Font                          '全文字体
  48.     Selection.Font.Size = Hz_Size                          '全文字号
  49.    
  50. '关闭域代码、禁用屏幕刷新
  51.     ActiveWindow.View.ShowFieldCodes = False               '关闭域代码:Alt+F9切换
  52.     Application.ScreenUpdating = False                     '禁用屏幕刷新

  53. '计算全文字数
  54.     Selection.WholeStory
  55.     CharCount = Selection.Characters.Count
  56.    
  57. '将光标定位到文档开头并折叠选区,确保从第一个字符开始遍历
  58.     Selection.HomeKey Unit:=wdStory
  59.     Selection.Collapse Direction:=wdCollapseStart

  60. '确保光标在文档开头且折叠
  61.     Selection.HomeKey Unit:=wdStory
  62.     Selection.Collapse Direction:=wdCollapseStart

  63. '开始计时
  64.     Time1 = Timer
  65.     CnCount = 0

  66. '每次选择的字符个数:
  67. '纯中文: [1-8],建议值=[5-8], 太短速度慢,太长丢拼音
  68. '中英文混排: [1], 速度慢但更安全,大于1会报错
  69.     Num = 1

  70. '标注拼音
  71.     If Num = 1 Then
  72.         '选择文字:逐个选择中文字符并标注拼音--速度慢但更安全
  73.         For Loops = 1 To CharCount
  74.             CursorPos = Selection.MoveRight(Unit:=wdCharacter, Count:=1, Extend:=wdExtend)
  75.             SubLength = Len(Selection.Text)
  76.             LastChar = Right(Selection.Text, 1)
  77.             If LastChar Like "[一-龥]" Then
  78.                 SendKeys "{enter}", True
  79.                 Application.Run MacroName:="FormatPhoneticGuide"               '标注拼音
  80.                 CnCount = CnCount + 1
  81.             End If
  82.             Selection.MoveRight Unit:=wdCharacter, Count:=SubLength
  83.         Next
  84.     Else
  85.         '选择文字:选择字符串并标注拼音--速度快但有风险
  86.         Set DocRange = ActiveDocument.Content
  87.         FullText = DocRange.Text
  88.         '从头开始标注拼音
  89.         For I = 1 To CharCount Step Num
  90.             CursorPos = Selection.MoveRight(Unit:=wdCharacter, Count:=Num, Extend:=wdExtend)
  91.             SubLength = Len(Selection.Text)
  92.             Block = Mid(FullText, I, Num)
  93.             HasChinese = False
  94.             '检查当前字符串是否包含汉字
  95.             For J = 1 To Len(Block)
  96.                 Ch = Mid(Block, J, 1)
  97.                 '判断基本汉字区
  98.                 If Ch Like "[一-龥]" Then
  99.                     HasChinese = True
  100.                     Exit For
  101.                 End If
  102.             Next J
  103.             '如果字符串包含汉字,则在文档中选中该区域并添加拼音
  104.             If HasChinese Then
  105.                 SendKeys "{enter}", True
  106.                 Application.Run MacroName:="FormatPhoneticGuide"               '标注拼音
  107.                 CnCount = CnCount + 1
  108.             End If
  109.             Selection.MoveRight Unit:=wdCharacter, Count:=SubLength
  110.         Next I
  111.     End If
  112.    
  113. '结束计时
  114.     Time2 = Timer
  115.     If Time2 < Time1 Then
  116.         Time2 = Time2 + 24 * 3600
  117.     End If

  118. '计算标注速度
  119.     Time0 = Time2 - Time1
  120.     If Time0 = 0 Then
  121.         Time0 = 1
  122.     End If
  123.     Speed = CnCount / Time0

  124. '设置拼音格式:字体=等线/字号=8/对齐方式=居中
  125.     ActiveWindow.View.ShowFieldCodes = True                '显示域代码:Alt+F9切换
  126.     Application.ScreenUpdating = False                     '禁用屏幕刷新
  127.     Selection.HomeKey Unit:=wdStory                        '移动光标到全文开头

  128. '使用Range对象进行全文查找替换,避免依赖 Selection
  129.     Set Rng = ActiveDocument.Range
  130.     With Rng.Find
  131.         '清除之前的格式设置,并设置通用查找参数
  132.         .ClearFormatting
  133.         .Replacement.ClearFormatting
  134.         .Forward = True
  135.         .Wrap = wdFindContinue
  136.         .Format = False
  137.         .MatchCase = False
  138.         .MatchWholeWord = False
  139.         .MatchByte = True
  140.         .MatchWildcards = False
  141.         .MatchSoundsLike = False
  142.         .MatchAllWordForms = False
  143.         '替换拼音字体
  144.         .Text = Hz_Font
  145.         .Replacement.Text = Py_Font
  146.         .Execute Replace:=wdReplaceAll
  147.         '替换拼音字号
  148.         .Text = Hz_hps0
  149.         .Replacement.Text = Py_Size
  150.         .Execute Replace:=wdReplaceAll
  151.         '替换拼音对齐方式
  152.         .Text = "jc2"
  153.         .Replacement.Text = Py_jc00
  154.         .Execute Replace:=wdReplaceAll
  155.     End With

  156. '恢复原始环境设置
  157.     ActiveWindow.View.ShowFieldCodes = False               '关闭域代码
  158.     Application.ScreenUpdating = True                      '恢复屏幕刷新
  159.     Selection.HomeKey Unit:=wdStory                        '移动光标到全文开头

  160.     MsgBox "拼音标注完毕, 请手工调整." & vbCrLf & "标注次数=" & CnCount & vbCrLf & "耗时秒数=" & Round(Time0, 3) & vbCrLf & "标注速度=" & Round(Speed, 3)

  161. End Sub

复制代码


恭请高手帮忙优化Word自动标注拼音的VBS脚本


汉字标注拼音的方法:
1. 拼音字体      : 简单/可能收费+样式固定+繁体字可能缺失
2. 专业注音软件  : 简单/可能收费
3. Word拼音指南  : 通用+样式自定义/自动标注拼音必须用脚本


本文只讨论"3.Word拼音指南"的方式.


脚本说明:
Word自动标注拼音:格式-中文版式-拼音指南
Word格式:必须为纯文本格式:无格式文本/无格式的Unicode文本
标注原理:模拟运行Word内置宏"FormatPhoneticGuide"
注意事项:运行期间,拼音指南窗口频繁闪烁,请耐心等待脚本运行完毕,中途请勿切换窗口   
汉字范围的扩展:
常用范围:\u4e00-\u9fa5(约2万多汉字)--[一-龥]
扩展范围:\u3400-\u4dbf(扩展A区)和 \u4e00-\u9fff(更完整的常用区)
大多数情况下,使用 \u4e00-\u9fa5 或 [一-龥] 就足够了


测试情况:
Windows 10 + Word 2003/2007/2013正常运行


目前问题:
1. 逐个汉字标注, 速度慢.
2. 模拟运行Word内置宏"FormatPhoneticGuide", 无法真正全自动标注.
3. 只能前台运行.



千字文繁体版_原始版.7z

404.99 KB, 下载次数: 12, 下载积分: 无忧币 -2

千字文繁体版_原始版

Sub PinYin_New.7z

2.17 KB, 下载次数: 5, 下载积分: 无忧币 -2

Word VBS 脚本

2#
发表于 昨天 19:23 | 只看该作者
想速度快就用带拼音的字体,另外我好奇目的是啥,毕竟存在多音字的问题...


二○二六年三月十一日
回复

使用道具 举报

3#
发表于 昨天 20:17 | 只看该作者
坐等大侠出手。这是已经实现了?为啥要优化,往哪方面优化?
回复

使用道具 举报

4#
发表于 昨天 21:00 | 只看该作者
路过帮顶
回复

使用道具 举报

5#
发表于 昨天 23:31 | 只看该作者
了解
回复

使用道具 举报

6#
发表于 11 小时前 | 只看该作者
路过帮顶
回复

使用道具 举报

7#
发表于 5 小时前 | 只看该作者
谢谢分享
回复

使用道具 举报

8#
发表于 3 小时前 | 只看该作者
想快和实时,可以用vsto做个插件,没啥用啊
回复

使用道具 举报

9#
发表于 3 小时前 | 只看该作者
路过义务帮顶
回复

使用道具 举报

10#
发表于 2 小时前 | 只看该作者
守柔拼音一次处理30个字

SendKeys "{enter}", True应该是False

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2026-3-12 12:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表