Automatically Replace Misspellings with Suggestions for long lists of terms

六眼飞鱼酱① 提交于 2020-01-24 14:00:08

问题


I have a long list of terms. Over 90% are misspellings. Most of which are two words that have no space in the middle. I noticed that MS Word, Excel, Office, etc. is pretty good at suggesting the correct spelling. When I run the spellchecker, I don't have time to confirm each and every suggested correction. Having some errors are OK.

How can I automate spellcheck, or rather "spellcorrect" without prompting? I don't mind using other tools besides Microsoft, but it's spellchecker seems pretty good. I tried some VBA code to use with Excel, but I can't find anything that will programmatically show me the main suggestion so that I can replace the misspelled term.

Sub spellcheck()


    With Application.SpellingOptions
        .SuggestMainOnly = True
        .IgnoreCaps = True
        .
    End With

    Cells.CheckSpelling

End Sub

Any help is appreciated. And please I understand the danger of auto-correct. The impact of wrongful corrections is minimal.

Thanks, Steve


回答1:


A third party spell checker, such as aspell might give you the most speed & flexibility. But apparently, you can control the spell checker of Access, so that might be a possibility.

Given your special case of errors being due to lack of space between two words though, you may be able to get by with Excel's spell checker:

Sub test()
    Dim str, correction As String
    Dim i As Long, n As Long

    With Application
    For Each str In Array("pancake", "sausagebiscuit", "oatmeal", "largecoffee")
      correction = str ' by default leave alone
      If .CheckSpelling(str) Then
        ' already a word
      Else
        n = Len(str)
        For i = 1 To n
          If .CheckSpelling(Left$(str, i)) And .CheckSpelling(Right$(str, n - i)) Then
            correction = Left$(str, i) & " " & Right$(str, n - i)
          End If
        Next
      End If
      Debug.Print str & " -> " & correction
    Next
    End With
End Sub

Output:

pancake -> pancake
sausagebiscuit -> sausage biscuit
oatmeal -> oatmeal
largecoffee -> large coffee

Mmmm, breakfast....




回答2:


Assuming that you have a list of misspelled words in column A (starting in row 1) and their corrections in column B, you can use this macro to add them the Office's Autocorrect library. This way, Excel will replace the word with its correction right after the word is entered.

Sub subAddAutoCorrects()
    Dim rng As Range
    Set rng = Sheets("Sheet1").Range("A1")

    While rng  ""
        Application.AutoCorrect.AddReplacement What:=rng.Value, Replacement:=rng.Offset(, 1).Value
        Set rng = rng.Offset(1)
    Wend
End Sub



回答3:


It's been more than a year, but maybe you still need the solution to the problem.
Try this (in ms word):

Sub use_suggestion()  
Dim rng As Range  
Dim i As Long  

For i = 1 To ActiveDocument.Range.SpellingErrors.Count  
Set rng = ActiveDocument.Range.SpellingErrors(i)  

If rng.GetSpellingSuggestions.Count <> 0 Then  
rng = rng.GetSpellingSuggestions.Item(1).Name & "ZXQ"  
End If  

Next i  

Selection.HomeKey Unit:=wdStory  
Selection.Find.ClearFormatting  
Selection.Find.Replacement.ClearFormatting  

   With Selection.Find  
     .Text = "ZXQ"  
     .Replacement.Text = ""  
     .Forward = True  
     .Wrap = wdFindContinue  

   End With  

   Selection.Find.Execute Replace:=wdReplaceAll  
End Sub  

Note: the misspelled words that have no suggestion will not change.



来源:https://stackoverflow.com/questions/14554567/automatically-replace-misspellings-with-suggestions-for-long-lists-of-terms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!