zoukankan      html  css  js  c++  java
  • 自动标注音标升级版

    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    '为选择的文本中的每个单词注上音标
    Sub Start()
        On Error Resume Next
        
        '文档
        Dim Document As Document
        Set Document = ActiveDocument
         
        '各个索引
        Dim currentIndex As Long, endIndex As Long
        currentIndex = Selection.Start
        endIndex = Selection.End
         
        '正则表达式,用于搜索单词
        Dim regex As Object
        Set regex = CreateObject("VBScript.RegExp")
        With regex
            .MultiLine = True
            .IgnoreCase = True
            .Pattern = "[a-z]+" '限制纯英文
        End With
         
        '开始工作
        Do While currentIndex < endIndex
            '获取余后要比较的文本
            Dim rng As Range, text As String
            Set rng = Document.Range(currentIndex, endIndex)
            text = rng.text
             
            '匹配结果
            Dim matches As Object
            Set matches = regex.Execute(text)
            If matches.count > 0 Then
                Dim match As Object
                Set match = matches(0)
                 
                '新单词
                Dim word As String, wordStart As Long, wordEnd As Long
                word = match.Value
                wordStart = currentIndex + match.FirstIndex
                wordEnd = wordStart + match.Length
                 
                '查询
                Dim explanation As String
                If (Not Lookup(word, explanation)) Then
                    Exit Do
                End If
                 
                '插入
                Dim wordRng As Range
                Set wordRng = Document.Range(wordStart, wordEnd)
                wordRng.InsertAfter explanation
                 
                '设置样式
                Dim explanationRng As Range
                Set explanationRng = Document.Range(wordEnd, wordRng.End)
                explanationRng.Font.Color = RGB(0, 0, 0)
                explanationRng.HighlightColorIndex = wdGray25
                explanationRng.Font.Size = "8"
                '设置音标字体
                Dim innerRng As Range
                Set innerRng = Document.Range(wordEnd + 1, wordRng.End - 1)
                innerRng.Font.Name = "Kingsoft Phonetic Plain"
                 
                '准备下一次
                currentIndex = wordRng.End
                endIndex = endIndex + Len(explanation)
            Else
                Exit Do
            End If
        Loop
    End Sub
     
    Function Lookup(word As String, ByRef explanation As String) As Boolean
        Lookup = True
     
        '确保有翻译软件
        Dim translator As String
        translator = "金山词霸2007(暂停取词)"
        If Tasks.Exists(translator) = False Then'查询词典软件是否在运行中(要以管理员身份运行此VBA)
            MsgBox "请打开金山词霸2007并将其最小化至任务栏中"
            Lookup = False
            Exit Function    '如果未在任务栏中则关闭程序
        End If
     
        '查询单词
        Tasks(translator).WindowState = wdWindowStateNormal    '正常窗口
        Tasks(translator).Activate    '激活金山词霸应用程序,此处填写金山词霸任务栏的内容,如金山词霸2007
        SendKeys word, True    '发送单词
        'Sleep 1000
        SendKeys "{TAB 2}", True    '移动二次TAB
        'Sleep 500
        SendKeys "^a", True    '复制
        'Sleep 500
        SendKeys "^c", True    '复制
        Sleep 800   '稍微停顿一下以等待以前的操作完成
     
        '获取查询结果
        Dim MyData As MSForms.DataObject
        Set MyData = New MSForms.DataObject    '引用DataObject(随便拖一个窗体控件进来便可以引入其DLL)
        MyData.GetFromClipboard    '从剪贴板复制数据到 DataObject
     
        Dim CopyTxt As String
        CopyTxt = MyData.GetText(1)    '获得无格式文本
          
        Dim Mystring() As String
        Mystring = VBA.Split(CopyTxt, vbCrLf)    '返回一个数组
     
        explanation = Mystring(1)    '取得数组中的第二个值,也就是音标
     
        '最小化翻译软件
        Tasks(translator).WindowState = wdWindowStateMinimize
        
        '成功
        Lookup = True
    End Function
    
    

      

  • 相关阅读:
    HAProxy、Keepalived 在 Ocatvia 的应用实现与分析
    Octavia 的 HTTPS 与自建、签发 CA 证书
    Octavia 创建 loadbalancer 的实现与分析
    OpenStack Rally 质量评估与自动化测试利器
    自建 CA 中心并签发 CA 证书
    Failed building wheel for netifaces
    通过 vSphere WS API 获取 vCenter Datastore Provisioned Space 置备空间
    OpenStack Placement Project
    我们建了一个 Golang 硬核技术交流群(内含视频福利)
    没有图形界面的软件有什么用?
  • 原文地址:https://www.cnblogs.com/beta2013/p/3518859.html
Copyright © 2011-2022 走看看