自動標註音標公升級版

2022-03-03 22:37:43 字數 3276 閱讀 1154

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 "", 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

介面公升級版

介面公升級版 假設乙個介面由2w個子類實現它 假如在介面內加乙個方法 那麼按照定義就要在這所有的子類裡面都實現 所以我們引入新概念 介面裡可以定義普通方法 即這個普通方法可以不被實現 普通方法就要用default實現 介面還可以實現static方法 呼叫是直接由介面.方法名呼叫 inte ce im...

採藥公升級版

問題描述 辰辰是個天資聰穎的孩子,他的夢想是成為世界上最偉大的醫師。為此,他 想拜附近最有威望的醫師為師。醫師為了判斷他的資質,給他出了乙個難題。醫 師把他帶到乙個到處都是草藥的山洞裡對他說 孩子,這個山洞裡有一些不同 的草藥,採每一株都需要一些時間,每一株也有它自身的價值。我會給你一段時 間,在這...

約瑟夫問題公升級版

編號為1 n的n個人按順時針方向圍坐一圈,每人持有乙個密碼 正整數,可以自由輸入 開始人選乙個正整數作為報數上限值m,從第乙個人按順時針方向自1開始順序報數,報道m時停止報數。報m的人出列,將他的密碼作為新的m值,從他順時針方向上的下乙個人開始從1報數,如此下去,直至所有人全部出列為止。includ...