myOutlook
Утилита для корректировки адресной книги Outlook. Удаляет дубли из телефонной книги. Исправляет ФИО. Выводит на консоль свои действия. Программа соединяется с открытым Outlook'ом.
using System;
using System.Collections;
using Microsoft.Office.Interop.Outlook;
using csUnit;
namespace myOutlook
{
public class Program
{
static bool контактИзменен;
static ContactItem текущийКонтакт;
static Hashtable СтарыеЗначенияПолей;
private static void Main(string[] args)
{
Application Outlook = new Application();
NameSpace nameSpace = Outlook.GetNamespace("MAPI");
Items КонтактыВOutlook = nameSpace.GetDefaultFolder(OlDefaultFolders.olFolderContacts).Items;
Hashtable КонтактПоПолномуИмени = new Hashtable();
Hashtable КонтактПоНомеруТелефона = new Hashtable();
foreach (ContactItem контакт in КонтактыВOutlook)
{
if (контакт.Class != OlObjectClass.olContact) continue;
текущийКонтакт = контакт;
контактИзменен = false;
СтарыеЗначенияПолей = new Hashtable();
контакт.PropertyChange += new ItemEvents_10_PropertyChangeEventHandler(ИзмененоПоле);
foreach (ItemProperty Поле in контакт.ItemProperties)
{
if (Поле.Name.Contains("phone") || (Поле.Name.Contains("fax")) ||
Поле.Name.Contains("FileAs") || (Поле.Name.Contains("FullName")))
{
СтарыеЗначенияПолей[Поле.Name] = Поле.Value;
}
if (Поле.Name.Contains("phone") || (Поле.Name.Contains("fax")))
{
if (Поле.Value.ToString() != "")
{
string Старый = (string)Поле.Value;
string Новый = Телефон(Старый);
if (Старый != Новый)
{
Console.WriteLine("Assert.Equals( \"{0}\", Program.Телефон(\"{1}\") );",
Старый, Новый);
Поле.Value = Новый;
}
if (КонтактПоНомеруТелефона.Contains(Новый))
{
Console.WriteLine("Дубль телефона: " + Новый +
" " + контакт.FullName + " " + ((ContactItem)КонтактПоНомеруТелефона[Новый]).FullName);
}
else
{
КонтактПоНомеруТелефона.Add(Новый, контакт);
}
}
}
}
if (КонтактПоПолномуИмени.Contains(контакт.FullName))
{
Console.WriteLine("Удаляю дубль: " + контакт.FullName);
контакт.Delete();
continue;
}
else
{
КонтактПоПолномуИмени.Add(контакт.FullName, контакт);
}
if (контакт.FileAs != контакт.FullName)
{
контакт.FileAs = контакт.FullName;
}
if (контакт.FullName != ФИО(контакт.FullName))
{
контакт.FullName = ФИО(контакт.FullName);
}
if (контактИзменен)
контакт.Save();
}
}
private static void ИзмененоПоле(string Name)
{
Console.WriteLine("["+текущийКонтакт.FileAs+"]."+Name+" = "+
СтарыеЗначенияПолей[Name]+" => "+
текущийКонтакт.ItemProperties[Name].Value);
контактИзменен = true;
}
/// <summary>
/// Конвертирование ФИО в правильное написание
/// </summary>
/// <param name="фио">ФИО как оно есть</param>
/// <returns>ФИО как должно быть</returns>
public static string ФИО(string фио)
{
switch (фио)
{
case "Михаил Павловский":
return "Миша Павловский";
case "Марченко Влад":
return "Влад Марченко";
// ...и так далее..
default:
return фио;
}
}
/// <summary>
/// Конвертирование номера телефона в нужный формат
/// </summary>
/// <param name="номер">Номер телефона как есть сейчас</param>
/// <returns>Номер телефона как он должен быть</returns>
public static string Телефон(string номер)
{
// Обработка служебных номеров
if ((номер.StartsWith("0")) || номер.Length < 7)
return номер;
// Обработка изменения кодов
номер = номер.Replace("+7 (011", "+7 (401"); // Kaliningrad
номер = номер.Replace("+7 (0", "+7 (4");
// Добаляем плюс в начало, если его нету
if (!номер.StartsWith("+"))
номер = "+" + номер;
if (номер.StartsWith("+8") && номер.Length == 12)
{
номер = "+7" + номер.Substring(2);
}
// Добавляем к Питерским номерам 812
if (номер.Length == 8)
{
номер = номер.Insert(1, "7812");
}
// Российские номера начинаются с +7
if (номер.StartsWith("+") && номер.Length == 12)
{
номер = номер.Insert(5, ") ");
номер = номер.Insert(2, " (");
}
return номер;
}
}
[TestFixture()]
class Tests
{
[Test]
public void КонвертацияНомеров()
{
Assert.Equals(Program.Телефон("0"), "0");
Assert.Equals(Program.Телефон("+78122674695"), "+7 (812) 2674695");
Assert.Equals(Program.Телефон("88122674695"), "+7 (812) 2674695");
Assert.Equals(Program.Телефон("78122674695"), "+7 (812) 2674695");
Assert.Equals(Program.Телефон("5113195"), "+7 (812) 5113195");
Assert.Equals(Program.Телефон("77017621290"), "+7 (701) 7621290");
Assert.Equals(Program.Телефон("16464362545"), "+1 (646) 4362545");
}
}
}