使用Range.DetectLanguage
,如何检测Word
文档的每个段落的语言并确定Word文档中最常用的语言?
我想要运行的文档集可以是法语或英语,但标题中都包含英语和法语,因此我无法使用Document.DetectLanguage
因为这会返回WdUndefined
所有文件。我需要检查所有段落并确定文档中最流行的语言。
在VBA
中执行此操作的最佳方式是什么?
答案 0 :(得分:3)
Dim doc As Document, para As Paragraph
Dim lang As WdLanguageId
Dim dict As New Dictionary
Set doc = ActiveDocument
If Not doc.LanguagedDetected Then doc.DetectLanguage
' count languages in paragraphs
For Each para In doc.Paragaphs
lang = para.Range.LanguageId
If Not dict.Exists(lang) Then
dict.add lang, 1
Else
dict(lang) = dict(lang) + 1
End if
Next
' determine most popular language
Dim maxCount As Integer, maxKey As wdLanguageId
For Each key In dict.Keys()
If dict(key) > maxCount Then
maxCount = dict(key)
maxKey = key
End if
Next
Debug.Print "Most popular language is: " & maxKey
答案 1 :(得分:2)
使用荷兰语,法语和英语文件。 根据我的经验,Office不会以正确的方式识别语言。我用系统语言编写一个文档:好吧,拼写和语法都是受控制的,语言自动设置为系统语言(即使系统和办公室语言选项中安装了另外两种语言)
即使在编写此文本时,所有单词都带有红色下划线,因此chrome也不会检测到该语言。
系统语言是荷兰语,这个问题一直存在,无论我做什么或做什么,我都要选择全部,手动设置语言,然后进行拼写检查。
如果检测不正确,循环使用这些语言是没有意义的。在我看来,语言/拼写/语法检测/检查/纠正选项是自2007年女士办公室以来,或近十年。见here
如果这与荷兰语是一种“小”语言这一事实有关,我不知道。 如果有一种方法可以为当前文档“设置语言”,那么一个简单的启动代码就可以完成这项任务,到目前为止,我没有找到执行此操作的代码,除了我写的这个简单的代码:
sub setlng()
'设置语言
Selection.WholeStory
有选择
选择Case InputBox(“你的语言是什么?(NL = Nederlands,FR =Français,EN =英语,DE = Deutch)”)
案例“Nl”,“NL”,“nL”
.LanguageID = wdDutch
案例“Fr”,“FR”,“fR”
.LanguageID = wdFrench
案例“En”,“EN”,“eN”
.LanguageID = wdEnglishUS
案例“De”,“DE”,“dE”
.LanguageID = wdGerman
结束选择
Application.CheckLanguage = True
结束子
显然,由于MSoffice是用英语编写的,你必须使用英语单词作为你的语言,而不是语言的语言,这是合乎逻辑的......
我对居住在Azerbeidjan的人非常好奇,前夕找到他们的语言"Selection.LanguageID = wdAzeriCyrillic"
......嗯......