(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 365 Business Standard (corporate)
Microsoft Office 365 для Дома 32-bit/x64. 5 ПК/Mac + 5 Планшетов + 5 Телефонов. Подписка на 1 год.
Microsoft Windows Professional 10, Электронный ключ
Microsoft 365 Apps for business (corporate)
Microsoft 365 Business Basic (corporate)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Новые программы для Windows
ЕRP-Форум. Творческие дискуссии о системах автоматизации
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100