Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2009, 21:12   #1
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию Работа со словами

Мне нужно как-то сделать программу, которая ищет в тексте словосочетания выделенные красным цветом (слова в них не разделяются пробелом) и поставить пробелы. Например: Я пишунафорум программистов, чтобымне помогли впрограммировании. Чтобы разделять слова прога берет слова из базы данных русских слов. Сделать это надо на языках, которые я знаю (C++,Delphi,VB или как макрос VBA в Word). Я не знаю как узнавать выделено ли слово каким-нибудь цветом. Возможно как HTML код парсить? Или в макросе можно как-то более цивильно узнавать цвет слова. Чтобы пробелы ставило в словосочетаниях я догадаюсь как сделать. Файл в формате docx . И еще хотелось бы спросить про БД слов: Можно как то мелкософтовскую использовать или надо лучше в инете поискать?
Maxs вне форума Ответить с цитированием
Старый 03.10.2009, 01:08   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Болванка

Вот буквально минут за 100 набросал «скелетик». Пока без базы.

Код:
Sub ToWorkWithColouredWords()

w = ActiveDocument.Words.Count
MsgBox "В " & ActiveDocument & " Word нашёл " & w & " «слов»."


With Selection
.HomeKey wdStory

        For n = 1 To w - 1 'число "слов" - подобрал наобум'
            
            .GoTo what:=wdWord, which:=wdGoToNext  ', Count:=1
            
            .MoveRight unit:=wdWord, Extend:=wdExtend
            
            ww = .Text
            
            If .Font.Color <> wdAuto Then 'вот тут проверяется цвет'
            ask = "Это слипшиеся слова?"
            Else: ask = ""
            End If
            
            a = InputBox("Вставьте пробелы, если нужно.", ask, ww)
            If a = vbNullChar Then .MoveRight Else .TypeText a
        
        Next
End With
End Sub
Цитата:
Сообщение от Maxs Посмотреть сообщение
<Word>...говорит что слово неправильно написано всегда. в чем тут ошибка?
Очевидно, Word открыт как английский. Попробуйте Формат→Язык→Русский или (в новых вордах):
кнопка Office → Параметры Word → Основные → Языковые параметры… → Языки редактирования → Основной язык редактирования → русский

Идеальным было бы использовать русский словарь ворда, он (иногда) сам предлагает: как «колбасу» из букв разбить на нормальные слова!

Советую также снять (навсегда) галку чекбокса по адресу:
кнопка Office → Параметры Word → Правописание → Автоматически проверять грамматику (это то, что включает такие зелёные волнистые линии и даёт по правой кнопке кучу советов).
Вложения
Тип файла: doc WordSplit.doc (40.5 Кб, 14 просмотров)

Последний раз редактировалось Sasha_Smirnov; 03.10.2009 в 21:56. Причина: добавил запуск клавишами Alt w.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 03.10.2009, 19:21   #3
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Спасибо большое! Многое я тут не понял, но так почему-то он спрашивает про каждое слово. Немного изменил и теперь выделяет то, что надо. По базе данных проходить очень долго каждый раз. У меня есть идея: например слово идуна . он сначала преобразует в: и дуна, проверяет... - что-то не то (в ворде бы подчеркноло волнистой чертой), далее ид уна - не то, иду на - вот это правильно=> применить изменения. Вот так примерно сделал, но он почему то говорит что слово неправильно написано всегда. в чем тут ошибка?
Код:
Sub ToWorkWithColouredWords()
w = ActiveDocument.Words.count
MsgBox " " & ActiveDocument & " Word íàø¸ë " & w & " «ñëîâ»."

With Selection
.HomeKey wdStory

        For n = 1 To w - 1 '÷èñëî "ñëîâ" - ïîäîáðàë íàîáóì'
            
            .GoTo what:=wdWord, which:=wdGoToNext  ', Count:=1
            
            .MoveRight unit:=wdWord, Extend:=wdExtend
            
            ww = .Text
            wws = .Text
            
            If .Font.Color = wdColorRed Then 'âîò òóò ïðîâåðÿåòñÿ öâåò'
            ask = "Ýòî ñëèïøèåñÿ ñëîâà?"
            i = 1
            Do
            wws = ww
            wws = Mid(wws, 1, i) + " " + Mid(wws, i + 1, Len(wws))
            i = i + 1
            MsgBox (wws)
            Loop Until (CheckSpelling(ww)) Or (i = Len(ww))
            .TypeText wws
  Rem          A = InputBox("Âñòàâüòå ïðîáåëû, åñëè íóæíî.", ask, ww)
  Rem          If A = vbNullChar Then Else .TypeText A
            Else:
            ask = ""
            .MoveRight
            End If

            
        
        Next
End With
End Sub
Maxs вне форума Ответить с цитированием
Старый 04.10.2009, 01:08   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Если нужно, есть ещё заготовка.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 05.10.2009, 14:14   #5
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Все, проблема решилась!

Последний раз редактировалось Maxs; 05.10.2009 в 17:01.
Maxs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа: число словами Artur09 Помощь студентам 3 10.03.2019 07:29
C++. Работа со строками и словами new programmer Помощь студентам 1 27.08.2009 16:36
Новый тип с зарезервированными словами Alex Cones Общие вопросы Delphi 5 03.06.2009 22:22
Разделитель между словами в запросе artemavd БД в Delphi 10 20.05.2009 18:18
Номер телефона словами alexBlack Софт 0 23.05.2008 09:19