helpf.pro
Регистрация
 0 
Распечатать

Функция проверяет орфографию переданного текста с помощью средств MS Word

Код 1C v 8.х
 // Проверка орфоргафии переданного текста с помощью средств MS Word
// Параметры
// <Текст> – <Строка> – проверяемый текст
// <ДеревоЗначений> – <ДеревоЗначений> – возвращает дерево замен
// Возвращаемое значение:
// <Булево> – Истина, если текст не содержит ошибок
Функция ПроверитьОрфографию(Текст, ДеревоЗначений = Null) Экспорт
Попытка
Ворд = Новый COMОбъект("Word.Application"); //Создаем объект MS Word
Исключение
Предупреждение("Microsoft Word не установлен!",,"Ошибка!");
Возврат Ложь;
КонецПопытки;

ТекстБезОшибок = Ворд.CheckSpelling(Текст); //проверяем нашу строку на ошибки

Если ТекстБезОшибок Тогда // Нет ошибок
Возврат Истина;

Иначе // Обнаружены ошибки, будем проверять по словам
Если ДеревоЗначений <> Null Тогда
Ворд_Активен = Ворд.Visible; //Запомним, был ли Word активен

ВремДок = Ворд.Documents.Add(); //Добавляем к открытым документам
МояОбласть = ВремДок.Range(0, 0); //Получаем пустую область в начале документа
МояОбласть.I_nsertBefore(Текст); //Добавляем в эту область нашу строку
ЧислоСлов = МояОбласть.Words.Count; //Подсчитываем число слов в области

ДеревоЗначений = Новый ДеревоЗначений; //сюда будем записывать слова и варианты их замен
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("Строка"));
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
ДеревоЗначений.Колонки.Добавить("Слово", ОписаниеТипов, "Слово/Замена",);

wdSpellword=0; //константа Word, указывающая на то, что при при вызове проверки орфографии возвращается множество замен
wdDoNotSaveChanges=0; //константа Word, указывающая на то, что при закрытии не надо сохранять изменения в закрываемом документе

Для НомерСлова = 1 По ЧислоСлов Цикл
ОбработкаПрерыванияПользователя();
ПровОбласть = МояОбласть.Words(НомерСлова); //выбираем очередное слово
ПровСлово = СокрЛП(ПровОбласть.Text);
СловоБезОшибок = Ворд.CheckSpelling(ПровСлово); //проверяем наше слово на ошибки
Если НЕ СловоБезОшибок Тогда //получаем варианты замен (их может и не быть!)
Если ДеревоЗначений.Строки.Найти(ПровСлово, "Слово") = Неопределено Тогда
НоваяСтрока = ДеревоЗначений.Строки.Добавить();
НоваяСтрока.Слово = ПровСлово;

Замены = ПровОбласть.GetSpellingSuggestions( ,1, ,wdSpellword); //проверяем орфографию, укзав, что возвращать надо множество замен
ЧислоЗамен = Замены.Count; //получаем число возможных замен
Если ЧислоЗамен > 0 Тогда //заносим варианты замен в таблицу значений
Для НомерЗамены = 1 По ЧислоЗамен Цикл
СловоЗамены = СокрЛП(Замены.Item(НомерЗамены).Name);
НоваяПодСтрока = НоваяСтрока.Строки.Добавить();
НоваяПодСтрока.Слово = СловоЗамены;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;

ВремДок.Close(wdDoNotSaveChanges,,);
Если Не Ворд_Активен Тогда
Ворд.Quit();
КонецЕсли;
КонецЕсли;

Возврат Ложь;
КонецЕсли;
КонецФункции


Пример использования:
Код 1C v 8.х
 
Перем ДеревоЗначений;
Состояние("Идет проверка орфографии. Пожалуйста ждите...");
Текст = ЭлементыФормы.ПолеТекстовогоДокумента.ПолучитьТекст(); // Получаем текст
Если ПроверитьОрфографию(Текст, ДеревоЗначений) Тогда // Проверяем орфографию
Предупреждение("Текст ошибок не содержит!!!", 5, "OK");
Иначе
Если ДеревоЗначений.Строки.Количество() > 0 Тогда
// Создаем и открываем форму автозамен...
ФормаВыбора = ЭтотОбъект.ПолучитьФорму("ФормаВыбора");

Для каждого СтрокаДЗ Из ДеревоЗначений.Строки Цикл
Строка = ФормаВыбора.ДеревоЗначений.Строки.Добавить();
Строка.Слово = СтрокаДЗ.Слово;

Для каждого ПодСтрокаДЗ Из СтрокаДЗ.Строки Цикл
ПодСтрока = Строка.Строки.Добавить();
ПодСтрока.Слово = ПодСтрокаДЗ.Слово;
КонецЦикла;
КонецЦикла;

Если ФормаВыбора.ОткрытьМодально() = "OK" Тогда
// Производим автозамены в тексте
Для каждого СтрокаДЗ Из ФормаВыбора.ДеревоЗначений.Строки Цикл
Для каждого ПодСтрокаДЗ Из СтрокаДЗ.Строки Цикл
Если ПодСтрокаДЗ.Пометка Тогда
Текст = СтрЗаменить(Текст, ПодСтрокаДЗ.Родитель.Слово, ПодСтрокаДЗ.Слово);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЭлементыФормы.ПолеТекстовогоДокумента.УстановитьТекст(Текст); //Вставим в поле исправленный текст
КонецЕсли;
Иначе
Предупреждение("В тексте найдены ошибки, но вариантов автозамены не нашлось!!!", 5, "Ошибка");
КонецЕсли;
КонецЕсли;
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 7073
 0 
Распечатать
Возможно, вас также заинтересует
1C медленно работает по сети с базой на SQL Server 8
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для...
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 0
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже...
SMTP greeting failure: 421 SMTP connection broken (reply) 2
Опи­са­ние ошиб­ки: С сен­тяб­ря 2014 Ян­декс.Почта, Mail.ru пе­ре­шли на про­то­кол SSL, что сде­ла­ло их еще более без­опас­ны­ми. Чтобы и даль­ше ра­бо­тать с пись­ма­ми через 1С, Вам нужно из­ме­нить их на­строй­ки и...
Автоматическая архивация баз 1С 8.х для файлового и клиент-серверного варианта 3
Данный способ архивации подходит для файловых и SQL версий баз 1С: И так: 1. Создаем скрипт vbs и сохраняем его в C:BackupZUP.vbs Set WshShell = CreateObject(" WScript.Shell" ) dim d,m,y d = day(date()) if d 10 then d = " 0" d end
Автоматическая архивация баз 1С с использованием Cobian Backup и VBS скриптов 6
Клиент попросил настроить автоматическую архивацию баз 1С раз в три дня и выгрузку архивов на Dropbox и на FTP Сервер. Кроме 1С нужно архивировать папку с рабочими документами. Хочет - так хочет, делаем: Первым делом...
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.