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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2010, 18:59   #1
lovial
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 21
По умолчанию Макрос определения языка документа

Есть много файлов Ворд. Нужен макрос, который определит язык документа и как-то это отобразит (изменит имя файла, создаст текстовый файл с именем и языком и т.д.). Проблема осложняется тем, что документы могут быть на 2-х языках (параллельно или один за другим), кроме того, в тексте могут быть отдельные фразы на третьем языке. Кроме того, язык документа может быть не определен Вордом...
lovial вне форума Ответить с цитированием
Старый 08.10.2010, 21:48   #2
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

Цитата:
Кроме того, язык документа может быть не определен Вордом...
а какой функцией ворд определяет язык ?
bdfy вне форума Ответить с цитированием
Старый 09.10.2010, 00:18   #3
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата из раздела справки Word "Об автоматическом определении языка":
"...
МЕХАНИЗМ ОПРЕДЕЛЕНИЯ ЯЗЫКА

С целью достижения наивысшей точности при анализе сочетаний букв в каждом предложении используются специальные языковые алгоритмы и статистические данные. Для отдельных слов и коротких фраз язык не определяется. При определении языка круг возможных решений постепенно сужается до набора языков, заданного при настройке Microsoft Word, в следующей последовательности:

1. Доступные для редактирования языки.

2. Язык, используемый по умолчанию в данном документе(определяется соответствующим параметром форматирования обычного стиля в активном шаблоне).
..."
3. Активный язык клавиатуры (если установлены несколько языков клавиатуры и раскладок клавиатуры).

Определение языка производится одновременно с работой над текстом и не мешает пользователю. В новых документах проверка осуществляется с самого начала по мере ввода каждого предложения, а также при копировании или вставке в файл фрагментов текста. Если открывается документ, который ни разу не проверялся, проверке подвергается каждое предложение. Кроме того, заново проверяется любое предложение, если в него вносятся изменения.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 11.10.2010, 10:21   #4
lovial
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 21
По умолчанию

Вот пока что нарыл:
MsgBox Application.Language показывает 1049, если язык Word русский.

Selection.LanguageDetected (равно False, когда язык не определён, и когда язык определён — True).
А вот как заставить Ворд автоматически язык определить - не знаю...
lovial вне форума Ответить с цитированием
Старый 13.10.2010, 19:26   #5
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от lovial Посмотреть сообщение
А вот как заставить Ворд автоматически язык определить - не знаю...
А сколько языков? Потому как для распознания своими силами Ворду нужны словари соответствующих языков.

Перезапуск распознания языка:
Код:
With ActiveDocument
    .LanguageDetected = False
    .DetectLanguage
End With
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 13.10.2010, 20:17   #6
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Еще светик к приведенному коду. Чтоб уж Word наверняка поработал, надо предварительно тексту присвоить язык, для которого установлены средства проверки правописания. Лучше всего подходит английский, т.к. он стоит везде. Конечный код будет выглядеть так:
Код:
        Selection.LanguageID = wdEnglishUK
        Selection.LanguageDetected = False
        Selection.DetectLanguage
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 29.10.2010, 17:21   #7
lovial
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Код:
        Selection.LanguageID = wdEnglishUK
        Selection.LanguageDetected = False
        Selection.DetectLanguage
Ругается на 2 строку: Selection.LanguageDetected = False
lovial вне форума Ответить с цитированием
Старый 27.04.2011, 12:31   #8
lovial
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 21
По умолчанию

Вот нашел макрос. Он устанавливает для всего документа параметр языка «русский», а для слов, начинающихся с латинской буквы – «английский». Зачем-то сделана прокрутка.
97 Ворд ругается на .NoProofing, в 2003 запускал - работает.

Sub Select_Language()
'Выбор языка для проверки правописания
Selection.WholeStory
Selection.LanguageID = wdRussian
Selection.NoProofing = False
Selection.HomeKey Unit:=wdStory
n1 = 0
w1 = "a"
se1 = Selection.End
se2 = -1
Do While se1 <> se2
w1 = Left(Trim(Selection.Words(1)), 1)
If w1 <> "" Then
n1 = Asc(w1)
If (n1 >= 65 And n1 <= 90) Or (n1 >= 97 And n1 <= 122) Then
Selection.Words(1).LanguageID = wdEnglishUS
Selection.Words(1).NoProofing = False
End If
End If
Selection.MoveRight Unit:=wdWord, Count:=1
se2 = se1
se1 = Selection.End
Loop
Application.CheckLanguage = True
If se1 = se2 Then MsgBox "Конец документа"
End Sub

Немного поразмыслив, решил определение языка документа сделать "в лоб": поиск в файле букв, имеющихся в данном языке и отсутствующих в других, обязательно с непохожим начертанием. Таким образом, для русского буду искать э, ъ, ы, для украинского ї, є, ґ, в английском - например, z, f, s. Счетчики будут считать количество найденных букв и по окончании поиска добавлять к имени файла букву r, u и/или a (если соответствующие счетчики больше нуля).
С счетчиками попробую разобраться сам, основная проблема (для меня) - код добавления буквы в имя файла...

П.С. Еще немного поразмыслив, пришел к выводу, что самому мне это дело не осилить. У меня есть рабочий макрос для пакетной обработки файлов (работает в 97 Ворде). Кто возьмется вставить в него поиск букв, счетчик и переименование файла? За соответствующее вознаграждение, разумеется.
Sub Макрос11111()
Set WordObj = CreateObject("Word.Application")
MyPath = "C:\Obrabotka\1\" 'указать путь к папке
iFileName = Dir(MyPath) 'имя первого файла в папке. Не менять!!!
Do While iFileName <> ""
Set WordDoc = WordObj.Documents.Open(MyPath + iFileName) 'открываем первый файл
WordObj.Visible = False 'можно его отображать, можно не отображать
'Здесь должен быть код по изменению файлов
WordObj.Documents(iFileName).Close SaveChanges:=True 'сохраняем и закрываем файл
iFileName = Dir 'получение следующего имени файла в папке. Не менять!!!
Loop
WordObj.Quit 'закрываем MS WORD
Set WordDoc = Nothing 'освобождаем память
Set WordObj = Nothing 'освобождаем память
MsgBox "Файлы обработаны!", vbOKOnly + vbInformation, "Обработка файлов"
End Sub

Последний раз редактировалось lovial; 27.04.2011 в 14:07.
lovial вне форума Ответить с цитированием
Старый 27.04.2011, 19:51   #9
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от lovial Посмотреть сообщение
Ругается на...Selection.LanguageDetected...
Кто ругается? Перечислите поименно.
Цитата:
Сообщение от lovial Посмотреть сообщение
97 Ворд ругается на .NoProofing
Не могу проверить в Word 97, но можно попробовать заменть.
Аналогом .NoProofing = True является .LanguageID = wdNoProofing ' 1024.
Ну а .NoProofing = False, соответствует присвоение какого либо языка, например .LanguageID = wdRussian.

P.S. Что-то форум периодически тормозит, не могу даже зайти на этот сайт.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/

Последний раз редактировалось Вождь; 27.04.2011 в 19:53.
Вождь вне форума Ответить с цитированием
Старый 28.04.2011, 15:50   #10
lovial
Пользователь
 
Регистрация: 08.10.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Кто ругается? Перечислите поименно.
Вижуал Бэйсик ругается. Говорит, мол, "Ошибка компиляции: Метод или компонент данных не найден"

Впрочем, это, ИМХО, не актуально для меня на данный момент. Кстати, я выше описал, как я это вижу, не возьметесь?
lovial вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос: Обновить данные в документа Word Alex9k Microsoft Office Word 0 22.07.2010 16:12
EXCEL.VBA. Макрос "точной" копии документа xАлексейx Фриланс 5 12.07.2010 22:17
Прога для определения языка программирования L4r4n Помощь студентам 1 10.06.2010 13:53
Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос as-is Microsoft Office Excel 4 25.02.2010 07:51
Как программно удалить макрос из документа ? Николай IV Microsoft Office Word 14 08.07.2009 17:47