EXCELでの自動スペルチェック

良い一日。



先日、「経験豊富なユーザー」Excelが私と同僚に話しかけました。 作業の詳細によると、「経験豊富なユーザー」は、ドキュメントにオフィススイートを使用することがよくあります。 奇妙なことに、Excelスプレッドシートも一般的です。 Habréと同様、スペルミスのあるドキュメントを発行することは許可されていません。 スペルミスの標準Excel機能はありません。 この点で、このような機能を実装するExcel用のアドインを開発しました。



エラーのチェックはそれほど難しくありませんが、私が使用した標準のSpellCheckがあります。 2つの部分を実装することになっています。

1)すでに満たされているセルを確認する

2)入力時のリアルタイム検証。

最初のケースでは、すべてのセルをチェックし、エラーがある場合、トークンを選択し、各トークンを個別にチェックします。エラーのあるトークンについては、メモを作成し、エラーのあるトークンを赤で強調表示します。 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); }
      
      







登録中は他に何もしません。 書籍全体を確認すると、ユーザーは電話に出ることができます。

リボンに独自のタブを作成します。 新しいアイテムリボンを追加(ビジュアルデザイナー)/

新しいタブを作成します。最初のタブには触れないでください。 彼女は留守です。

また、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:habrozhitelのリクエストにより、既製のプラグインをここに投稿しました



All Articles