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

    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub GetPhonetic()
    '必须有音标字体安装Kingsoft Phonetic Plain
    '写在前面:您运行此程序前必须引用MSForms
    '即VBE/工具/引用:Microsoft Forms 2.0 Object Library (C:WINNTsystem32FM20.DLL)
    '打开金山词霸,并使用显示在任务栏中,不是最小化系统托盘(启动栏)中!!(金山词霸/主菜单/
    '设置/界面方案/其它/其它选项:任务栏图标,去勾)并关闭屏幕取词功能!
    '将每个单词为一个段落,注意,本程序未加入单词拼写检查,可在WORD中拼写和语法检查中设置
        On Error Resume Next
        
        Dim translator As String
        translator = "金山词霸2007(暂停取词)"
        If Tasks.Exists(translator) = False Then Exit Sub    '如果未在任务栏中则关闭程序
        
        'Application.ScreenUpdating = False    '关闭屏幕更新
        With ActiveDocument
            Dim i As Paragraph
            For Each i In .Paragraphs    '在段落中循环
                i.Range.Select
                
                Dim EwTxt As String
                EwTxt = i.Range.Text
                EwTxt = Trim(EwTxt)
                EwTxt = VBA.Split(EwTxt, " ")(0)   '返回文本(单词)
                If Len(EwTxt) < 2 Then GoTo GN '如果为空白段落则继续下一次
                
                Tasks(translator).WindowState = wdWindowStateNormal    '正常窗口
                Tasks(translator).Activate    '激活金山词霸应用程序,此处填写金山词霸任务栏的内容,如金山词霸2007
                SendKeys EwTxt, True    '发送单词
                'Sleep 1000
                SendKeys "{TAB 2}", True    '移动二次TAB
                'Sleep 500
                SendKeys "^a", True    '复制
                'Sleep 500
                SendKeys "^c", True    '复制
                Sleep 500   '稍微停顿一下以等待以前的操作完成
                
                Dim MyData As DataObject
                Set MyData = New DataObject    '引用DataObject
                MyData.GetFromClipboard    '从剪贴板复制数据到 DataObject
                
                Dim CopyTxt As String
                CopyTxt = MyData.GetText(1)    '获得无格式文本
                
                Dim Mystring() As String
                Mystring = VBA.Split(CopyTxt, vbCrLf)    '返回一个数组
                
                Dim aString As String
                aString = Mystring(1)    '取得数组中的第二个值,也就是音标
                
                Dim StartWrite As Long
                StartWrite = i.Range.End - 1    '取得段落标记前的位置
               
                Dim MyRange As Range
                Set MyRange = .Range(StartWrite, StartWrite)    '取得段落标记前的插入点区域
                
                MyRange.InsertAfter " " & aString    '在插入点处插入音标
                '设置该区域的音标字体
                .Range(StartWrite + 2, i.Range.End - 2).Font.Name = "Kingsoft Phonetic Plain"
                
                Tasks(translator).WindowState = wdWindowStateMinimize    '正常窗口
                Tasks(VBA.Replace(.Name, ".doc", "")).Activate    '激活WORD文档
                i.Range.Select
    GN:     Next
            'Application.ScreenUpdating = True    '恢复屏幕更新工作
            MsgBox "自动音标标注工作已经结束!", vbInformation + vbOKOnly, "Microsoft Word" '提示
        End With
    End Sub
    

      

    参考:http://hi.baidu.com/zl90712/item/77c225e60816b60c8c3ea80b

  • 相关阅读:
    如何说明白代码评审
    面试感悟----一名3年工作经验的程序员应该具备的技能(转载自@五月的仓颉)
    根据ip地址从第三方接口获取详细的地理位置
    linux安装telnet遇到的问题
    redis脑图
    数据库相关面试题
    logback系列一:名词解释
    java并发编程系列一、多线程
    logback系列二:logback在项目中的应用
    rocketmq特性(features)
  • 原文地址:https://www.cnblogs.com/beta2013/p/3462030.html
Copyright © 2011-2022 走看看