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 |  Дата:   Прочитано: 14334
 0 
Распечатать
Возможно, вас также заинтересует
1C медленно работает по сети с базой на SQL Server 23
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 2
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э
SMTP greeting failure: 421 SMTP connection broken (reply) 8
Опи­са­ние ошиб­ки: С сен­тяб­ря 2014 Ян­декс.Почта, Mail.ru пе­ре­шли на про­то­кол SSL, что сде­ла­ло их еще более без­опас­ны­ми. Чтобы и даль­ше ра­бо­тать с пись­ма­ми через 1С, Вам нужно из­ме­нить их на­строй­ки и вне­сти до­ра­бот­ки в код
Автоматическая архивация баз 1С 8.х для файлового и клиент-серверного варианта 6
Данный способ архивации подходит для файловых и 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 скриптов 9
Клиент попросил настроить автоматическую архивацию баз 1С раз в три дня и выгрузку архивов на Dropbox и на FTP Сервер. Кроме 1С нужно архивировать папку с рабочими документами. Хочет - так хочет, делаем: Первым делом настроим автоматическую архивац
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!