Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: проверка орфографии в Ворде  (Прочитано 19858 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ципихович Эндрю
Помогающий

ru
Offline Offline

« : 11-01-2011 14:02 » 

Как проверить орфографию в Ворде при помощи ВБА, примеры в сети видел, но они ограничиваются выводом формы Ворда "Правописание" с приглашением проверить орфографию. Одним словом есть переменная А="орфаграфия", как при помощи ВБА узнать не прибегая ни к каким формам, если бы это слово было "орфаграфия" было бы напечатано в документе Ворда, оно бы было подчёркнуто волнистой линией, если да то какой, красной или зелёной, ну и уж для полного счаться:
если оно было бы подчёркнуто зелёной линией, то какое сообщение "приготовил" Ворд
если оно было бы подчёркнуто красной линией,, какие варианты замены этого слова "приготовил" Ворд
Спасибо
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #1 : 11-01-2011 14:35 » 

Мда, ну и задачка..
Вот, накопал пока что-то такое: http://www.vbforums.com/showthread.php?t=246451
Там народ открывает новый Word, встявляет в него текст, вызывает спеллчекер, а потом сравнивает результат после замены.
Вообще вряд ли Office Automation рассчитывал что его спеллчекер будут использовать снаружи Улыбаюсь

Добавлено через 17 минут и 47 секунд:
Сорри, нет времени долго искать или объяснять, но вот еще интересные результаты:
* http://support.microsoft.com/kb/147818   - примерно то же самое, но короче
* http://www.codeproject.com/KB/recipes/csapi.aspx?msg=381286  - !! походу оно, но на C/WinAPI Улыбаюсь  Если кто-то захочет пересести на VBA - удачи Улыбаюсь

Добавлено через 3 минуты и 26 секунд:
Ну, и вот еще: http://windowsclient.net/articles/spellcheck.aspx
« Последнее редактирование: 11-01-2011 14:53 от baldr » Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #2 : 12-01-2011 16:27 » 

по ссылке http://www.codeproject.com/KB/recipes/csapi.aspx?msg=381286
в строке int Language = 1051 - язык = 1951, русский язык в Microsoft обычно числится под номером &H0419, так??
Ну там мне не подъёмно в плане что язык Дельфи или вроде того
по ссылке http://support.microsoft.com/kb/147818
там хоть статья Как использовать Word 6,0 Spell Checker через OLE Automation в Visual Basic, уже ближе
Я программирую только на ВБА, других языков увы не знаю, попробовал прогнать этот код:
       
Код:
 
         Dim oWDBasic As Object
         Dim sTmpString As String
         Set oWDBasic = CreateObject("Word.Basic")
         oWDBasic.FileNew
       
         oWDBasic.Insert Text1.Text ' ошибка 424 требуется объект
'если так, тогда ...
         oWDBasic.Insert ActiveDocument.Text1.Text 'ошибка 438 объект не поддерживает этот метод
         
         On Error Resume Next
         oWDBasic.ToolsSpelling 'инструменты орфографии
         oWDBasic.EditSelectAll 'правка выделить всё
         oWDBasic.SetDocumentVar "MyVar", oWDBasic.Selection
         sTmpString = oWDBasic.GetDocumentVar("MyVar")
         Text1.Text = Left(sTmpString, Len(sTmpString) - 1)
         MsgBox "Spell Check is complete" 'сообщение "Проверка орфографии завершена"
подскажите что нужно изменить в скрипте, чтобы его попробовать в ВБА, спасибо

Добавлено через 50 минут и 56 секунд:
А если воспользоваться этим скриптом в ВБА, тогда на строке   objDoc.CheckSpelling
виснет конкретно, и что то верится с трудом глядя на этот скрипт и скрипт моего предыдущего сообщения, что там реализовано
то что указано у меня в вопросе:
если бы слово "орфаграфия" было бы напечатано в документе Ворда, оно бы было подчёркнуто волнистой линией, если да то какой, красной или зелёной, ну и уж для полного счаться:
если оно было бы подчёркнуто зелёной линией, то какое сообщение "приготовил" Ворд
если оно было бы подчёркнуто красной линией,, какие варианты замены этого слова "приготовил" Ворд

Код:
Dim objWord As Object
    Dim objDoc  As Object
    Dim strResult As String
   
    'Create a new instance of word Application
    Set objWord = CreateObject("word.Application")

    Select Case objWord.Version
        'Office 2000
        Case "9.0"
            Set objDoc = objWord.Documents.Add(, , 1, True)
        'Office XP
        Case "10.0"
            Set objDoc = objWord.Documents.Add(, , 1, True)
        'Office 97
        Case Else ' Office 97
            Set objDoc = objWord.Documents.Add
    End Select

    objDoc.Content = ActiveDocument.Text1.Text
    objDoc.CheckSpelling

    strResult = Left(objDoc.Content, Len(objDoc.Content) - 1)

    If ActiveDocument.Text1.Text = strResult Then
        ' There were no spelling errors, so give the user a
        ' visual signal that something happened
        MsgBox "The spelling check is complete.", vbInformation + vbOKOnly
    End If
   
    'Clean up
    objDoc.Close False
    Set objDoc = Nothing
    objWord.Application.Quit True
    Set objWord = Nothing

    ' Replace the selected text with the corrected text. It's important that
    ' this be done after the "Clean Up" because otherwise there are problems
    ' with the screen not repainting
    ActiveDocument.Text1.Text = strResult

Добавлено через 46 минут и 56 секунд:
И мой Ворд 2003 определяет как
Case Else ' Office 97
            Set objDoc = objWord.Documents.Add
заходит в эту ветку

Добавлено через 45 минут и 28 секунд:
ранее я писал:на строке   objDoc.CheckSpelling виснет конкретно
понял почему, да потому что всё же это окно формы Ворда "Правописание"
то есть где есть строка типа этой: objDoc.CheckSpelling это мимо
То есть надо подправлять скрипт из моего Ответ #2 : Сегодня в 16:27
Подскажите пожалуйста

« Последнее редактирование: 12-01-2011 18:05 от Ципихович Эндрю » Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #3 : 13-01-2011 06:13 » 

вот готовый код
http://hiprog.com/index.php?option=com_content&task=view&id=421&Itemid=38
одна просьбы к ЦЭ, не просто тупо копируйте код, а попробуйте его разобрать и понять  Здесь была моя ладья...
иначе Вас будут банить на всех форумах Внимание! Говорит и показывает...
Записан

I Have Nine Lives You Have One Only
THINK!
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #4 : 13-01-2011 12:51 » 

в догонку
ЦЭ, в предложенном коде много лишнего, так что, как его разберете, выложите пожалуйста полученный Вами результат на форум, если конечно не трудно
Записан

I Have Nine Lives You Have One Only
THINK!
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #5 : 13-01-2011 14:47 » 

Спасибо большое, понял я из Вашей ссылки, что ценным является только этот отрезок:
Код:
А="орфаграфия"
If Len(А) < 1 Then Exit Sub
Set tmpObjWord = CreateObject("Word.Application")
' А есть ли ошибки?
If tmpObjWord.CheckSpelling(А) Then
MsgBox "Текст без ошибок!"
' освободим память
Set tmpObjWord = Nothing
' нет ошибок - выходим.
Exit Sub
End If
То есть, если следовать ТЗ в самом вопросе, то
есть переменная А="орфаграфия", как при помощи ВБА узнать не прибегая ни к каким формам, если бы это слово было "орфаграфия" было бы напечатано в документе Ворда, оно бы было подчёркнуто волнистой линией, если да то какой, красной или зелёной, ну и уж для полного счаться:
если оно было бы подчёркнуто зелёной линией, то какое сообщение "приготовил" Ворд
если оно было бы подчёркнуто красной линией,, какие варианты замены этого слова "приготовил" Ворд

Не решить Мы вызываем форму Ворда "Правописание" с приглашением проверить орфографию
Но то что я нарыл с Вашей помощью это уже что то, то есть я знаю с точки зрения Ворда есть ли ошибка
Если я не прав поправьте меня, возможно я не прав потому что я это всё делаю в ВБА
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #6 : 14-01-2011 06:28 » 

правильно.
никаких форм не вызывается. проверка идет стандартными методами
добавлю, даже в Вашем кусочке кода, есть много лишнего.
предлагаю Вам использовать "Object Browser" (встроен в VBA, Вы же на нем работаете), в котором можно увидеть все методы и св-ва объектов
плюс справку или инет
дерзайте
Записан

I Have Nine Lives You Have One Only
THINK!
Ципихович Эндрю
Помогающий

ru
Offline Offline

« Ответ #7 : 14-01-2011 14:17 » new

даже в Вашем кусочке кода, есть много лишнего
оттачивать можно много, был бы результат, подумаешь был объект, нет объекта сегодня в ВБА работаю завтра на ВБ6
убавить я всегда успею и умею
Код:
А = "орфаография"
If Len(А) < 1 Then Exit Sub
If CheckSpelling(А) Then MsgBox "Текст без ошибок!" Else MsgBox "Текст с ошибками!"
Да уже и дальше шагнул

Код:
А = "орфаграфия"
'А = "праграма"
А = "хаем"

If CheckSpelling(А) Then
   MsgBox "Текст: " & А & " без ошибок!"
Else
   Dim sugList As SpellingSuggestions
   Dim sug As SpellingSuggestion
   Dim strSugList As String
   'Spelling Suggestions орфография предложения
   Set sugList = GetSpellingSuggestions(Word:=А, SuggestionMode:=wdSpellword)
   
   If sugList.Count = 0 Then
       MsgBox "Предложения замены слову нет"
   Else
       For Each sug In sugList
           strSugList = strSugList & vbTab & sug.Name & vbLf
       Next sug
       MsgBox "Предложения для замены этого слова: " & vbLf & strSugList
   End If
End If
и чтобы счастье было полным как узнать - это слово было бы подчёркнуто зелёной или красной линией, если зелёной, то какое сообщение "приготовил" Ворд
Вот пример А = "хаем" определил как без ошибок, на самом деле там должно быть сообщение просторечное выражение


Добавлено через 1 день, 18 часов, 23 минуты и 42 секунды:
Подсказали в другом месе. Для тех кому интересно:
Код:
Проверяемое_слово = "дурень"
'точку и пробел надо ставить у проверяемого слова
If Application.CheckGrammar(Проверяемое_слово & ". ") = False Then
MsgBox$ "Проверяемое слово: " & Проверяемое_слово & " подчёркнуто зелёной волнистой линией"
ElseIf CheckSpelling(Проверяемое_слово) Then
   MsgBox "Проверяемое слово: " & Проверяемое_слово & " без ошибок!"
Else
   Dim sugList As SpellingSuggestions
   Dim sug As SpellingSuggestion
   Dim strSugList As String
   'Spelling Suggestions орфография предложения
   Set sugList = GetSpellingSuggestions(Word:=Проверяемое_слово, SuggestionMode:=wdSpellword)
   
   If sugList.Count = 0 Then
       MsgBox "Предложения замены слову: " & Проверяемое_слово & " нет"
   Else
       For Each sug In sugList
           strSugList = strSugList & vbTab & sug.Name & vbLf
       Next sug
       MsgBox "Предложения для замены слова: " & Проверяемое_слово & vbLf & strSugList
   End If
End If
Осталось выцарапать сообщение выдаваемое если слово подчёркнуто зелёной волнистой линией
« Последнее редактирование: 16-01-2011 08:40 от Ципихович Эндрю » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines