Нижегородский файловый портал
RSS - каналы
Главное меню
Категории каталога
Мои статьи [5]
Школа покера [5]
Софт [40]
Радиолюбителям и электрикам [8]
Интернет [167]
Система [89]
Комплектующие ПК [47]
Безопасность [56]
Программирование [18]
Веб-дизайнеру [5]
Игры [6]
Полезные советы [24]
Кулинария [1]
Телефония [10]
Мобильник [17]
Планшеты [14]
Медицина [5]
Работа [4]
Домашнему мастеру [0]
Строительство и ремонт [19]
Для сада и огорода [2]
Юмор и приколы [12]
Интересное [114]
Пластики [3]
Разное [238]
Мини-чат
Правила мини-чата



Мини-чат в окне
Погода в Нижнем
Яндекс.Погода
Главная » Статьи » Программирование

Автоматическая проверка орфографии в EXCEL
Вопросом автоматической проверки орфографии задавались многие "опытные пользователи" Excel. По специфике работы "опытные пользователи" часто используют офисный пакет для оформления документации. Как ни странно, таблицы Excel так же часто встречаются.

Вообще-то не допустимо выпускать документы с орфографическими ошибками. Стандартной возможности
Excel, по подсветке орфографических ошибок нет. В связи с этим был разработан Add-ins для Excel, который бы реализовывал такой функционал.

Проверить наличие ошибок не так и сложно, есть стандартный SpellCheck, которым мы и воспользуемся. Реализовывать предполагается 2 части:

 1) проверка уже заполненных ячеек
 2) проверка в реальном времени при вводе

Сама логики работы простая, В первом случае проверяем все ячейки, если есть ошибка, выделяем лексемы и проверяем каждую лексему отдельно, для ошибочных лексем, создаем примечание и выделяем ошибочную лексему красным цветом.

Во втором случае просто подписываемся на событие изменения ячейки и делаем все как в 1 случае, только с меньшим диапазоном.

Итак, приступим.

Запускаем VisualStudio, создаем расширение для Excel 2007.

При регистрации плагина, подпишемся на событие Cell-Changed и вызовем нашу функцию (функция будет описана чуть позже).

private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            //Подпишемся на событие изменения ячейки
            Globals.ThisAddIn.Application.Cells.Worksheet.Change += new Excel.DocEvents_ChangeEventHandler(Worksheet_Change);
        }
void Worksheet_Change(Excel.Range Target)
        {
            SpellCheck.SpellChecker(Target);
        }

Больше при регистрации ничего делать не будем. Проверку всей книги оставим пользователю по вызову.
Создаем свою вкладку в Ribbon. Добавляем новый Item Ribbon (Visual Designer)/

Создадим новую вкладку, первую не трогаем, т.к. она зарезервирована.

Так же, добавим 2 кнопки проверки: проверка всей книги, и проверку текущего листа.

Пропишем в событиях кнопок следующий код

Для всей книги:

private void OrfoCheckAll_Click(object sender, RibbonControlEventArgs e)
        {
            var excel = Globals.ThisAddIn.Application;
            var wss = excel.Worksheets;
            var app = excel.Application;
            foreach (var ws in wss)
            {
                var sheet = ws as Excel.Worksheet;
                if (sheet != null)
                {
                    var range = sheet.UsedRange;
                    foreach (var cll in range)
                    {
                        var cell = cll as Excel.Range;
                        SpellCheck.SpellChecker(cell);
                    }
                }
            }
        }

Для листа:

private void OrfoCheckCurrentSheet_Click(object sender, RibbonControlEventArgs e)
        {
            var excel = Globals.ThisAddIn.Application;
            var app = excel.Application;
            var sheet = app.ActiveSheet as Excel.Worksheet;
            if (sheet != null)
            {
                var range = sheet.UsedRange;
                foreach (var cll in range)
                {
                    var cell = cll as Excel.Range;
                    SpellCheck.SpellChecker(cell);
                }
            }
        }

Ну и самое главное, создадим статичный класс SpellCheck, в котором и опишем нашу функцию проверки:

public static class SpellCheck
    {
        public static void SpellChecker(Excel.Range Target)
        {
            var app = Globals.ThisAddIn.Application.Application;
            string str = Target.Text.ToString();
            if (app.CheckSpelling(str, Type.Missing, true) == false)
            {
                foreach (string tmp in ((string)str).Split(' '))
                {
                    if (app.CheckSpelling(tmp, Type.Missing, Type.Missing) == false)
                    {
                        if (Target.Comment == null)
                        {
                            Target.AddComment("Ошибка в слове " + tmp);
                            Target.Characters[str.IndexOf(tmp) + 1, tmp.Length].Font.ColorIndex = 3;
                        }
                        else
                        {
                            Excel.Characters c = Target.Comment.Shape.TextFrame.Characters(Type.Missing, Type.Missing);
                            if (!c.Caption.Contains(tmp))
                            {

                                c.Caption = c.Caption + " " + tmp;
                            }
                            Target.Characters[str.IndexOf(tmp) + 1, tmp.Length].Font.ColorIndex = 3;
                        }
                    }
                    else
                    {
                        Target.Characters[str.IndexOf(tmp) + 1, tmp.Length].Font.ColorIndex = 0;
                    }
                }
            }
            else
            {
                if (Target.Comment != null)
                {
                    if (Target.Comment.Shape.AlternativeText.Contains("Ошибка в слове "))
                    {
                        Target.Characters[str.IndexOf(str), str.Length].Font.ColorIndex = 0;
                        Target.Comment.Delete();
                    }
                }
            }

        }

После компиляции и загрузки плагина проверяем работу:



Это всё, чего не хватало Excel для автоматической проверки.

Добавил: Админ-21NN | Просмотров: 2832 | Комментарии: 1 | Рейтинг: 5.0/1


Обратите Ваше внимание на другие статьи:

Уважаемые пользователи, пожалуйста, оставляйте комментарии! Нам очень важно Ваше мнение!
Всего комментариев: 1
20.01.2012 Спам
1. (karlaman)
Секретарь нашего директора получила нагоняй от директора за наделанные орфографические ошибки в созданном документе Exel. Она попросила меня как-то помочь с установкой орфографической проверки. Может удастся "переварить" приведённые Ваши материалы и обрадовать женщину. Спасибо! smile

Добавлять комментарии могут только зарегистрированные пользователи.

    
Меню пользователя
Аватар гостя

Приветствуем Вас, Гость

Логин:
Пароль:
Поиск по сайту
Поиск по названию
Поиск по тегам
Горячие темы форума
Зарабатываем деньги
Детская игра Подарки...
Тест скорости подклю...
кое что о Windows
Кто ты, человек?
Новая валюта портала
Все о сексе
"Что мешает нам...
Культура
Афоризмы
Лучшие 13 анекдотов ...
как защитить свой ко...
поговорим о софте
восстановление данны...
Я ненавижу Дом-2
Волга-Телеком
Кулинария "Кокт...
Стол заказов
Жалобы
С Днем Победы!!!
Прикольные картинки
С праздником Пасхи !...
Статистика
Новых за месяц: 149
Новых за неделю: 42
Новых вчера: 6
Новых сегодня: 3
Всего: 5314
Из них:
Администраторов: 3
$$$-Модераторов: 1
Модераторов: 3
Прокураторов: 3
-----------------
далее:
Проверенных: 247
Пользователей: 2884
Новичков: 1880
Заблокированных: 100
-----------------
Из всех пользователей:
Мужчин и парней: 4153
Женщин и девушек: 1160
Именинники
Поздравляем с Днем рожденья:

amidala(33), cino(26), avinb(35), vic2011(52), Aleksty(58), cerick(46), AmirZager(17), rider(30), kirikxxx(33), shadochron(34), salkovs1(63), maxmin(30), varvar06(35), rena7271(46)
Режим ON-LINE
Онлайн всего: 46
Гостей: 46
Пользователей: 0

Сейчас на портале:
Наша кнопочка
Нижегородский файловый портал

HTML-код кнопки:
Реклама
Размещение рекламы

Яндекс.Метрика
Регистрация сайта в каталогах, раскрутка и оптимизация сайта, контекстная реклама Ремонт холодильников в Нижнем Новгороде

Copyright © BankRemStroy © 2009-2017