ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2769|回复: 4

[转帖] 也说中英文音标

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-10-7 18:07 | 显示全部楼层 |阅读模式
1、分享守柔代码。
[守柔分享]WORD与金山词霸 - 自动标注音标的小程序
━━━━━━━━━━━━━━━━━━━━━━━━━

'* +++++++++++++++++++++++++++++
'* Created By I Love You_Word!@ExcelHome 2005-2-25 08:09:09
'仅测试于System: Windows NT Word: 10.0 Language: 2052
'^The Code CopyIn [ThisDocument-ThisDocument]^'
'* -----------------------------
Sub GetPhonetic()
    '写在前面:您运行此程序前必须引用MSForms
    '即VBE/工具/引用:Microsoft Forms 2.0 Object Library (C:\WINNT\system32\FM20.DLL)
    '打开金山词霸,并使用显示在任务栏中,不是最小化系统托盘(启动栏)中!!(金山词霸/主菜单/
    '设置/界面方案/其它/其它选项:任务栏图标,去勾)并关闭屏幕取词功能!
    '将每个单词为一个段落,注意,本程序未加入单词拼写检查,可在WORD中拼写和语法检查中设置

    Dim EwTxt As String, MyData As DataObject, CopyTxt As String, MyRange As Range
    Dim Mystring() As String, aString As String, i As Paragraph, StartWrite As Long
    on Error Resume Next
    If Tasks.Exists("金山词霸") = False Then Exit Sub    '如果未在任务栏中则关闭程序
    Tasks("金山词霸").WindowState = wdWindowStateNormal    '正常窗口
    Set MyData = New DataObject    '引用DataObject
    Application.ScreenUpdating = False    '关闭屏幕更新
    With ActiveDocument
        For Each i In .Paragraphs    '在段落中循环
            If Len(i.Range) = 1 Then GoTo GN    '如果为空白段落则继续下一次
            EwTxt = i.Range.Text    '返回文本(单词)
            StartWrite = i.Range.End - 1    '取得段落标记前的位置
            Set MyRange = .Range(StartWrite, StartWrite)    '取得段落标记前的插入点区域
            Tasks("金山词霸").Activate    '激活金山词霸应用程序
            SendKeys EwTxt, True    '发送单词
            SendKeys "{TAB 2}", True    '移动二次TAB
            SendKeys "^c", True    '复制
            MyData.GetFromClipboard    '从剪贴板复制数据到 DataObject
            CopyTxt = MyData.GetText(1)    '获得无格式文本
            Mystring = VBA.Split(CopyTxt, vbCrLf)    '返回一个数组
            aString = Mystring(1)    '取得数组中的第二个值,也就是音标
            MyRange.InsertAfter " " & aString    '在插入点处插入音标
            '设置该区域的音标字体
            .Range(StartWrite + 2, i.Range.End - 2).Font.Name = "Kingsoft Phonetic Plain"
            GN:   'Next
        Next
        Application.ScreenUpdating = True    '恢复屏幕更新工作
        Tasks(VBA.Replace(.Name, ".doc", "")).Activate    '激活WORD文档
        '提示
        MsgBox "自动音标标注工作已经结束!", vbInformation + vbOKOnly, "Microsoft Word"
    End With
End Sub
'----------------------

单词风暴也可以的,你可以百度搜单词风暴官网下载,你输入单词,词组,句子,它自动匹配音标的
可以参考这个,百度搜下就行了《万能词库制作——最好的背单词软件“单词风暴”领先于同类产品的必杀技 》
2、分享  作者:风凌 E - mail:hchaoming@163.com
用金山词霸自动给单词添加音标和解析
━━━━━━━━━━━━━━━━━━━━━━━━━
利用ActiveX引用金山词霸自动给英文word文档里光标处(或选择)的英文单词添加音标和解析的VBA代码

这是一个利用ActiveX引用金山词霸自动给英文word文档里光标处(或选择)的英文单词添加音标和解析的VBA代码。
作者:风凌 E - mail:hchaoming@163.com

注意事项
1.使用时请确保安装有PowerWord2006,添加引用“KSEngine1.0TypeLibrary”
2.如果安装了其他版本的金山词霸,可以自行调试,
3.程序里添加词库的命令视具体的安装路径和词库位置而定。
4.如果没有也不想安装金山词霸的运用程序,可以直接“引用”附件里的KSEngine.dll,词库也可直接使用附件中提供的PWQEC.DIC词库,注意KSEngine.dll保存在本地磁盘不能使用中文路径,否则创建对象时出错。
5.另外,为方便使用,1).可将本程序写在normal工程中,将对其他word文档也可见; 2).可将本宏命令添加到word得自定义工具栏中。
6.欢迎大家改进,帮助完善 * ^^ * 请E - mail我。2009.05.30

━━━━━━━━━━━━━━━━━━━━━━━━━
Option Explicit
Sub Qklookup()
    Dim boolSelMode As Boolean
    Dim strMyWord As String
    Dim Myrange As Range, Mystart As Long
    Dim Dic As KSENGINELib.Dictionary
    Dim i As Integer
    Application.ScreenUpdating = False    '关闭屏幕更新
    boolSelMode = True     ' 取词方式 设定标志True为光标取词,false为选中取词
    If boolSelMode Then
        With Selection.Words(1)
            strMyWord = RTrim(.Text)
            For i = 1 To .Characters.Count - 1
                .Characters(i).Font.Bold = True
                .Characters(i).Font.Shadow = True
                .Characters(i).Font.Shading.Texture = wdTexture20Percent
            Next
            Mystart = .End
        End With
    Else
        With Selection
            strMyWord = .Text
            .Font.Bold = True
            .Font.Shadow = True
            .Font.Shading.Texture = wdTexture20Percent
            Mystart = .Range.End + 1
        End With
    End If

    on Error Resume Next
    Set Dic = New KSENGINELib.Dictionary
    Dic.Open "C:\Program Files\Kingsoft\PowerWord 2006\DICTS\PWQEC.DIC"
    If Err Then
        MsgBox "无法打开字典词库"
        Err.Clear
        Exit Sub
    End If
    Dic.Lookup strMyWord, 3
    If Err Then
        MsgBox "找不到该单词,请修改单词 或 更新词库"
        Err.Clear
        Exit Sub
    End If
    Set Myrange = ActiveDocument.Range(Mystart, Mystart)
    Myrange.InsertAfter "(["
    Mystart = Myrange.End
    Set Myrange = ActiveDocument.Range(Mystart, Mystart)
    Myrange.InsertAfter Dic.GetPhonetic
    Myrange.Font.Name = "Kingsoft Phonetic Plain"
    Mystart = Myrange.End
    Set Myrange = ActiveDocument.Range(Mystart, Mystart)
    Myrange.InsertAfter "]" & Dic.GetExplain & ") "
    Myrange.Font.Name = "Times New Roman"
End Sub
3、VBA 有道单词本源码
' 1.将以下程式码复制到Excel VBA 模组(Module)中
'
' 2.在Excel工作表中A Column输入要批量翻译的生词列表
'
' 3.若要转出有道xml格式单词库文件,请执行xmlVocabulary,汇出的档案位置为Excel活页簿位置,档案名称为 "工作表名称.xml "
'
' 4.若要批量翻译直接写入Excel档,请执行xlsmVocabulary
'
' 5.先以少量生词列表测试翻译速度,我自己1000个字大概花7~8分钟翻译
'
' 6.若要现成的Excel档,请网搜 "有道单词本.xlsm "

Private Type Character
    word As String
    trans As String
    phonetic As String
    tags As String
    'progress As Integer
End Type

'汇出有道xml格式单词库文件
Sub xmlVocabulary()

    Dim newChar As Character
    Dim R As Range
    Dim Row As Range
    Dim strOutput As String
    Dim arrBytes() As Byte

    newChar.tags = ActiveSheet.name
    ActiveSheet.Names.Add name: = "NewWord", RefersTo: = "=OFFSET($A$1,0,0,COUNTA($A:$A))"
    Set R = ActiveSheet.Names("NewWord").RefersToRange

    strOutput = ""
    For Each Row In R.Rows
        newChar.word = Trim(Row(1))
        Call searchWord(newChar.word, newChar.trans, newChar.phonetic)
        strOutput = strOutput & vbCrLf & ""
        strOutput = strOutput & vbCrLf & "" & newChar.word & ""
        strOutput = strOutput & vbCrLf & "" & newChar.trans & ""
        strOutput = strOutput & vbCrLf & "" & newChar.phonetic & ""
        strOutput = strOutput & vbCrLf & "" & newChar.tags & ""
        strOutput = strOutput & vbCrLf & "1"
        strOutput = strOutput & vbCrLf & ""
    Next Row
    strOutput = strOutput & vbCrLf & ""

    arrBytes = ChrW( &HFEFF) & strOutput     '写入unicode文字码

    Open Application.ActiveWorkbook.Path & "\" & newChar.tags & ".xml" For Binary As #1      '建立xml格式档案
        Put #1, , arrBytes

    Close #1

End Sub

'单词音译写入Excel档
Sub xlsmVocabulary()

    Dim newChar As Character
    Dim R As Range
    Dim Row As Range
    Dim rr As Integer

    strTags = ActiveSheet.name
    ActiveSheet.Names.Add name: = "NewWord", RefersTo: = "=OFFSET($A$1,0,0,COUNTA($A:$A))"
    Set R = ActiveSheet.Names("NewWord").RefersToRange

    rr = 0

    For Each Row In R.Rows
        rr = rr + 1
        newChar.word = Trim(Row(1))

        Call searchWord(newChar.word, newChar.trans, newChar.phonetic)
        Worksheets(strTags).Cells(rr, 2).Value = newChar.phonetic   '撷取音标
        Worksheets(strTags).Cells(rr, 3).Value = newChar.trans      '撷取翻译

    Next Row

End Sub


Sub searchWord(tmpWord As String, tmpTrans As String, tmpPhonetic As String)
    'http://dict.youdao.com/search?q=单词&keyfrom=dict.index
    Dim XH As Object
    Dim s() As String
    Dim str_tmp As String
    Dim str_base As String

    tmpTrans = ""
    tmpPhonetic = ""

    '开启网页
    Set XH = CreateObject("Microsoft.XMLHTTP")
    on Error Resume Next
    XH.Open "get", "http://dict.youdao.com/search?q=" & tmpWord & "&keyfrom=dict.index", False
    XH.send
    on Error Resume Next
    str_base = XH.responseText
    XH.Close
    Set XH = Nothing

    str_base = Split(Split(XH.responseText, "")(0), "")(1)

    '撷取音标
    If UBound(Split(str_base, "美")) = 1 Then
        '美式音标
        tmpPhonetic = Split((Split(Split(str_base, "美")(1), "")(1)), "")(0)
        on Error Resume Next
    Else
        tmpPhonetic = Split((Split(str_base, "")(1)), "")(0)
        on Error Resume Next
    End If

    '撷取中文翻译
    str_tmp = Split((Split(str_base, "")(1)), "")(0)
    str_tmp = Split((Split(str_tmp, "
")(1)), "
")(0)
    s = Split(str_tmp, "
")
    tmpTrans = Split(s(LBound(s) + 1), "
")(0)
    For i = LBound(s) + 2 To UBound(s)
        tmpTrans = tmpTrans & Chr(10) & Split(s(i), "
")(0)
    Next
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-7 18:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
4、必应抓词
Sub GetProTrans4() '必应抓词
Dim html As New HTMLDocument, i, url, w
On Error Resume Next
With CreateObject("Microsoft.XMLHTTP")
    For i = 2 To Sheet1.Range("A1").CurrentRegion.Rows.Count
        w = Sheet1.Cells(i, 1).Value
        url = "http://cn.bing.com/dict/search?q=" & w
        .Open "get", url, True
        .send
        While .readyState <> 4
            DoEvents
        Wend
        html.body.innerHTML = .responseText
        Sheet1.Cells(i, 2) = html.getElementsByClassName("hd_p1_1")(0).innerText
        Sheet1.Cells(i, 3) = html.getElementsByTagName("ul")(1).innerText
    Next
End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-2-27 16:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-7 10:32 | 显示全部楼层
weiyingde 发表于 2019-10-7 18:12
4、必应抓词
Sub GetProTrans4() '必应抓词
Dim html As New HTMLDocument, i, url, w

请问这个代码在excel中怎么用?单词放在第几列?

TA的精华主题

TA的得分主题

发表于 2020-6-7 10:37 | 显示全部楼层
weiyingde 发表于 2019-10-7 18:12
4、必应抓词
Sub GetProTrans4() '必应抓词
Dim html As New HTMLDocument, i, url, w

如何获取单词的音标.rar (11.03 KB, 下载次数: 20)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 12:51 , Processed in 0.041353 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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