Доброе время суток Хаброжители.
Буквально на днях, ко мне и моим коллегам обратились «опытные пользователи» Excel. По специфике работы «опытные пользователи» часто используют офисный пакет для оформления документации. Как ни странно, таблицы Excel так же часто встречаются. Как и на Хабре, не допустимо выпускать документы с орфографическими ошибками. Стандартной возможности excel, по подсветке орфографических ошибок нет. В связи с этим я разработал Add-ins для Excel который бы реализовывал такой функционал.
Проверить наличие ошибок не так и сложно, есть стандартный SpellCheck, которым я и воспользовался. Реализовывать предполагается 2 части:
1) проверка уже заполненных ячеек
2) проверка в реальном времени при вводе.
Сама логики работы простая, В первом случае проверяем все ячейки, если есть ошибка, выделяем лексемы и проверяем каждую лексему отдельно, для ошибочных лексем, создаем примечание и выделяем ошибочную лексему красным цветом. Во втором случае просто подписываемся на событие изменения ячейки и делаем все как в 1 случае только с меньшим диапазоном.
Приступим:
Запускаем VisualStudio, создаем расширение для Excel 2007.
При регистрации плагина, подпишемся на событие Cell-Changed и вызовем нашу функцию (функция будет описана чуть позже).
Больше при регистрации ничего делать не будем. Проверку всей книги оставим пользователю по вызову.
Создаем свою вкладку в Ribbon. Добавляем новый Item Ribbon (Visual Designer)/
Создадим новую вкладку, первую не трогаем, т.к. она зарезервирована.
Так же, добавим 2 кнопки проверки: проверка всей книги, и проверку текущего листа.
Пропишем в событиях кнопок следующий код
Для всей книги
Для листа
Ну и самое главное, создадим статичный класс SpellCheck в котором и опишем нашу функцию проверки
После компиляции и загрузки плагина проверяем работу

Это всё чего не хватало Excel для автоматической проверки.
Как всегда, если у вас есть более интересные методы реализации, делитесь опытом
UPD: По просьбам хаброжителей, выложил готовый Плагин тут
Буквально на днях, ко мне и моим коллегам обратились «опытные пользователи» 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 для автоматической проверки.
Как всегда, если у вас есть более интересные методы реализации, делитесь опытом
UPD: По просьбам хаброжителей, выложил готовый Плагин тут
