(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Автоматическая проверка орфографии в EXCEL

Источник: habrahabr

Буквально на днях, ко мне и моим коллегам обратились "опытные пользователи" 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 для автоматической проверки.
 Как всегда, если у вас есть более интересные методы реализации, делитесь опытом

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 18.01.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft 365 Business Standard (corporate)
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
CASE-технологии
Программирование на Microsoft Access
Новые материалы
3D и виртуальная реальность. Все о Macromedia Flash MX.
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100