EXCEL рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд░реНрддрдиреА рдЬрд╛рдБрдЪ

рд╢реБрдн рджрд┐рдиред

рджреВрд╕рд░реЗ рджрд┐рди, "рдЕрдиреБрднрд╡реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдПрдХреНрд╕реЗрд▓ рдиреЗ рдореБрдЭреЗ рдФрд░ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ред рдХрд╛рдо рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, "рдЕрдиреБрднрд╡реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛" рдЕрдХреНрд╕рд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╕реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдПрдХреНрд╕реЗрд▓ рд╕реНрдкреНрд░реЗрдбрд╢реАрдЯ рднреА рдЖрдо рд╣реИрдВред Habr├й рдкрд░, рд╡рд░реНрддрдиреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рд╡рд░реНрддрдиреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдирдХ рдПрдХреНрд╕реЗрд▓ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдРрдб-рдЗрдиреНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред

рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдорд╛рдирдХ рд╡рд░реНрддрдиреА рдЬрд╛рдВрдЪ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ 2 рднрд╛рдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ:
1) рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд░рд╛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
2) рдЗрдирдкреБрдЯ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕рддреНрдпрд╛рдкрдиред
рдХрд╛рд░реНрдп рдХрд╛ рддрд░реНрдХ рд╕реНрд╡рдпрдВ рд╕рд░рд▓ рд╣реИред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ рдЯреЛрдХрди рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрди рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдЬрд╛рдВрдЪреЗрдВ, рдПрдХ рдиреЛрдЯ рдмрдирд╛рдПрдВ рдФрд░ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдЧрд▓рдд рдЯреЛрдХрди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдВред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рд╕реЗрд▓ рдЪреЗрдВрдЬ рдИрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреА рд╢реНрд░реЗрдгреА рдХреЗ рд╕рд╛рде 1 рдХреЗрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЗрдП рд╢реБрд░реВ:
рд╣рдо VisualStudio рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдПрдХреНрд╕реЗрд▓ 2007 рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВред
рдкреНрд▓рдЧрдЗрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рд╕реЗрд▓-рдЪреЗрдВрдЬреЗрдб рдЗрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ (рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдмрд╛рдж рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред
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); } } } 

рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рд╕реНрдкреЗрд▓рдЪреЗрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рд╕рддреНрдпрд╛рдкрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ
 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: рд╣рд╛рдмреНрд░реЛрдЬрд╝рд┐рдЯреЗрд▓ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░, рдпрд╣рд╛рдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрди рдХреЛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛

Source: https://habr.com/ru/post/In136520/


All Articles