Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 6

Импорт контактов в Outlook из csv

17.04.2013, 12:43. Показов 3724. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня!!!
Имеется несколько удаленных подразделений, с контроллеров домена собирается информация в csv файл. На основе этого файла в оутлооке создаются папки с контактами подразделений и в них записываются все данные. Особо в vbs не силен, попыхтев недельку нарисовал нижеследующий скрипт.

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
Const olFolderDeletedItems            =  3
Const olFolderOutbox                  =  4
Const olFolderSentMail                =  5
Const olFolderInbox                   =  6
Const olFolderCalendar                =  9
Const olFolderContacts                = 10
Const olFolderJournal                 = 11
Const olFolderNotes                   = 12
Const olFolderTasks                   = 13
Const olFolderDrafts                  = 16
Const olPublicFoldersAllPublicFolders = 18
Const olFolderConflicts               = 19
Const olFolderSyncIssues              = 20
Const olFolderLocalFailures           = 21
Const olFolderServerFailures          = 22
Const olFolderJunk                    = 23
 
Dim objOutlook 
Dim objExplorer
Dim objNameSpace
Dim arrContCsv
Dim objOLAdress
Dim objOlFolders
Dim ContOlFolder
Dim NewContact
Dim ConOlItems
Dim BbFolder
Dim BoFolder
Dim IzFolder
Dim NNFolder
Dim OrFolder
Dim TlFolder
On Error Resume Next
Set ms = CreateObject("WScript.Shell")
Set fs = CreateObject("Scripting.FileSystemObject")
Set Wnet = CreateObject("WScript.Network")
Set objOutlook = CreateObject("Outlook.Application")
Set objNameSpace = objOutlook.GetNamespace("MAPI")
Set ContOlFolder = objNameSpace.GetDefaultFolder(10)
Set ConOlItems = ContOlFolder.Items
 
'Работаем с сетью и файловой системой
'Подключаем сетевую папку монтируем, как диск K:
Net_f = "\\192.168.0.11\Contacts"
Wnet.MapNetworkDrive "K:", Net_f, "True"
'Проверяем монтирование
If Err.Number <> 0 Then
    MsgBox "Сетевая папка " & Net_f & " не найдена. Проверьте сетевые подключения. Скрипт останавливается", _
        vbCritical, "Ошибка монтирования диска..."
        Wnet.RemoveNetworkDrive "K:"
    WScript.Quit
    Else
        ms.Popup "Подключена сетевая папка " & Net_f & " как диск K:",1 , "Монтирование сетевой папки", _
        vbOkOnly+vbInformation
End If
'Тестовое подключение к csv
Set ContCsv = fs.OpenTextFile("K:\allcontacts.csv")
'Set ContCsv = fs.OpenTextFile("c:\konsib.local.csv")
If Err.Number = 0 Then
    Do While ContCsv.AtEndOfStream <> True
        'Построчно читаем csv в массив значений
        arrContCsv = Split(ContCsv.Readline, ";")
        'Проверяем, количество элементов массива
        If UBound(arrContCsv) < 10 Then
            MsgBox "Неверный формат файла данных. Загрузка данных отменена", _
                vbCritical, "Ошибка файла данных..."
            Wnet.RemoveNetworkDrive "K:"
            WScript.Quit
        Else
            ContCsv.Close
            Exit Do
        End If
    Loop
Else
    MsgBox "Не удалось подключиться к файлу данных. Пригласите системного администратора"
    Wnet.RemoveNetworkDrive "K:"
    WScript.Quit
End If
'Удаляем папки Подразделений в папке Контакты
'Первый For задает количество проходов для удаления папок. Я хз... почему но с 
'первого прохода второй For все папки не удаляет, поэтому если последующая проверка корректости
'папок блюется рекомендую увеличить конечный параметр DelFol
For DelFol = 1 To 5 
    For Each objOlFolders In ContOlFolder.Folders
        'Удаляем папки подразделений
        MyFolder = objOlFolders.Name
        If GetName (MyFolder,0) Then
            ms.Popup "Удаляем папку " & MyFolder, 1, "Удаление папок контактов в Outlook", _
            vbOkOnly+vbInformation
            objOlFolders.ShowAsOutlookAB = False
            objOlFolders.Delete
        End If
    Next
Next
'Ждем 5 сек. чтобы отработало удаление папок
'WScript.Sleep 5000
'Проверяем корректность удаления папок
For Each objOlFolders In ContOlFolder.Folders
    'Проверяем все ли папки удалились корректно, если нет - завершаем скрипт
    MyFolder = objOlFolders.Name
    If GetName (MyFolder,0) Then
        MsgBox "Обнаружена неудаленная папка: " & MyFolder & "Скрипт останавливается."
        Wnet.RemoveNetworkDrive "K:"
        WScript.Quit
    End If
Next
'Создаем пустые папки с именами подразделений и ставим галочку чтобы они отображались в адресах
Set BbFolder = ContOlFolder.Folders.Add("Подразделение 1")
BbFolder.ShowAsOutlookAB = True
ms.Popup "Создаем пустую папку " & BbFolder.Name, 1, "Создание папок контактов в Outlook", vbOkOnly+vbInformation
Set BoFolder = ContOlFolder.Folders.Add("Подразделение 2")
BoFolder.ShowAsOutlookAB = True
ms.Popup "Создаем пустую папку " & BoFolder.Name, 1, "Создание папок контактов в Outlook", vbOkOnly+vbInformation
Set IzFolder = ContOlFolder.Folders.Add("Подразделение 3")
IzFolder.ShowAsOutlookAB = True
ms.Popup "Создаем пустую папку " & IzFolder.Name, 1, "Создание папок контактов в Outlook", vbOkOnly+vbInformation
Set NNFolder = ContOlFolder.Folders.Add("Подразделение 4")
NNFolder.ShowAsOutlookAB = True
ms.Popup "Создаем пустую папку " & NNFolder.Name, 1, "Создание папок контактов в Outlook", vbOkOnly+vbInformation
Set OrFolder = ContOlFolder.Folders.Add("Подразделение 5")
OrFolder.ShowAsOutlookAB = True
ms.Popup "Создаем пустую папку " & OrFolder.Name, 1, "Создание папок контактов в Outlook", vbOkOnly+vbInformation
Set TlFolder = ContOlFolder.Folders.Add("Подразделение 6")
TlFolder.ShowAsOutlookAB = True
ms.Popup "Создаем пустую папку " & TlFolder.Name, 1, "Создание папок контактов в Outlook", vbOkOnly+vbInformation
 
'Обнуляем счетчики добавляемых контактов
Bbk = 0
Bok = 0
Izk = 0
Nnk = 0
Ork = 0
Tlk = 0
 
'Подключаем csv как массив
    'CSV:Изменение(0);Регион(1);Фамилия(2);Имя(3);Отчество(4);Должность(5);
    'Подразделение(6);Организация(7);Телефон(8);Мобильный телефон(9);E-mail(10)
Set ContCsv = fs.OpenTextFile("K:\allcontacts.csv")
    Do While not ContCsv.AtEndOfStream  
    'Построчно читаем csv в массив значений
    arrContCsv = Split(ContCsv.Readline, ";")
    Em = Instr(arrContCsv(10),"@")
    CodReg = StrEdt(arrContCsv(1))
    If Em <> 0 And GetName(Codreg,1) Then
        'Определяем код региона и отдаем его переменной Foldreg, заодно увеличиваем счетчик добавленных контактов
        If CodReg = "22b" Then 
            Foldreg = BbFolder
            Bbk = Bbk + 1
            ElseIf CodReg = "22o" Then
                Foldreg = BoFolder
                Bok = Bok + 1
            ElseIf CodReg = "18" Then
                Foldreg = IzFolder
                Izk = Izk + 1
            ElseIf CodReg = "52" Then
                Foldreg = NNFolder
                Nnk = Nnk + 1
            ElseIf CodReg = "57" Then
                Foldreg = OrFolder
                Ork = Ork + 1
            ElseIf CodReg = "63" Then
                Foldreg = TlFolder
                Tlk = Tlk + 1
        End If
        Set NewContactsFoder = ContOlFolder.Folders(Foldreg)
        'Создаем новый контакт
        Set NewContact = objOutlook.CreateItem(2)
        NewContact.FullName = StrEdt(arrContCsv(3)) & " " & StrEdt(arrContCsv(2)) ' & " " & StrEdt(arrContCsv(4))
        NewContact.FirstName = StrEdt(arrContCsv(2))
        'NewContact.MiddleName = StrEdt(arrContCsv(4))
        NewContact.LastName = StrEdt(arrContCsv(3))
        'NewContact.LastNameAndFirstName = StrEdt(arrContCsv(2)) & " " & StrEdt(arrContCsv(3)) & " " & StrEdt(arrContCsv(4))
        NewContact.Email1Address = StrEdt(arrContCsv(10))
        'NewContact.Email1DisplayName = StrEdt(arrContCsv(2)) & " " & StrEdt(arrContCsv(3)) & " " & StrEdt(arrContCsv(10))
        NewContact.JobTitle = StrEdt(arrContCsv(5))
        NewContact.CompanyName = StrEdt(arrContCsv(6))
        NewContact.BusinessTelephoneNumber = StrEdt(arrContCsv(8))
        If Right(StrEdt(arrContCsv(9)),10) <> "" Then
            NewContact.MobileTelephoneNumber = "+7 " & Right(StrEdt(arrContCsv(9)),10)
        End If
        NewContact.Move NewContactsFoder
        NewContact.Save()
    End If
Loop
ms.Popup "Добавление контактов успешно завершено!" & vbLf & vbLf & BbFolder & ": добавлено " & Bbk & " контакта(ов)" _
& vbLf & BoFolder & ": добавлено " & Bok & " контакта(ов)" & vbLf & IzFolder & ": добавлено " & Izk & " контакта(ов)" _
& vbLf & NNFolder & ": добавлено " & Nnk & " контакта(ов)" & vbLf & OrFolder & ": добавлено " & Ork & " контакта(ов)" _
& vbLf & TlFolder & ": добавлено " & Tlk & " контакта(ов)", 7, "Контакты добавлены!", vbOkOnly+vbInformation
 
ContCsv.Close
Wnet.RemoveNetworkDrive "K:"
'=============================================================================
 
'=============================================================================
'Функция обработки строк:
Function StrEdt(St)
    StrEdt = Mid(St,2,Len(St)-2)
End Function
'Функция для работы с папками, передается 2 параметра: 
'Zn - передаваемый параметр в зависимости от Top
'Top - тип операции имеет следующие значения: 0 - проверка имени папки, 1 - проверка кода региона
Function GetName(Zn,Top)
        If Top = 0 Then
            If Zn = "Подразделение 1" Then
                GetName = True
                Exit Function               
            ElseIf Zn = "Подразделение 2" Then
                GetName = True
                Exit Function
            ElseIf Zn = "Подразделение 3" Then
                GetName = True
                Exit Function
            ElseIf Zn = "Подразделение 4" Then
                GetName = True
                Exit Function
            ElseIf Zn = "Подразделение 5" Then
                GetName = True
                Exit Function
            ElseIf Zn = "Подразделение 6" Then
                GetName = True
                Exit Function
            Else 
                GetName = False
                Exit Function
            End If
        ElseIf Top = 1 Then
            If Zn = "22b" Then
                GetName = True
                Exit Function               
            ElseIf Zn = "22o" Then
                GetName = True
                Exit Function
            ElseIf Zn = "18" Then
                GetName = True
                Exit Function
            ElseIf Zn = "52" Then
                GetName = True
                Exit Function
            ElseIf Zn = "57" Then
                GetName = True
                Exit Function
            ElseIf Zn = "63" Then
                GetName = True
                Exit Function
            Else 
                GetName = False
                Exit Function
            End If
        End If
End Function

Все отрабатывает нормально. Не получается победить следующее. Изначально сделал всё как положено,
захожу в Контакты, пользователи отображаются в формате "Фамилия, Имя Отчество" что вроде приемлимо и не нозит. Но при этом, когда при оформлении письма открываешь адресную книгу, в поле имя отображаются контакты в формате: "Имя Отчество Фамилия".
Решил схитрить "по русски" и на моменте импорта контактов поменял местами фамилию и имя. Теперь в адресной книге все замечательно, но в Контактах пользователи отображаются как "Имя, Фамилия".
Попробовал прописывать через LastNameAndFirstName но это поле только для чтения.
Подскажите пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.04.2013, 12:43
Ответы с готовыми решениями:

Импорт контактов в OutLook
Не получается залить в оутлук сразу много контактов, пробовал через CSV, Exel...нужна пошаговая инструкция...OutLook 2003, Windows...

Экспорт и импорт групп контактов в outlook 2010
Допустим у меня есть 2 группы контактов: бухгалтера и IT-служба. Если я делаю экспорт в файл, то контакты выгружаются, но созданные группы...

Импорт почтовых контактов (csv файл) в exchange server 2010
Добрый день! Подскажите пожалуйста, можно ли сделать импорт контактов на сервере exchange 2010? Дело в том, что начальство периодически...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.04.2013, 12:43
Помогаю со студенческими работами здесь

Как макросом сделать экспорт/импорт "Контактов" Outlook(03)?
Нашел совет с примером как создать объект содержащий &quot;контакты&quot;: Dim cnt As ContactItem Set cnt =...

Импорт контактов из базы данных в OUTLOOK через протокол stssync
Есть таблица tbl С полями id (integer), name(varchar), email(varchar), telephone(varchar). С запросом всё понятно: SELECT id, name,...

Импорт из 1С в bitrix через csv, импорт пути изображения
Добрый день Уважаемые, Уже всю голову сломал себе пытаясь импортировать csv файл в битрикс через Import CSV (new). Список товаров и...

Импорт контактов
Здравствуйте! Извините если пишу не совсем в правильное место, но столкнулся с проблемой, которую не просто решить. На gmail есть 4к+...

Добавление новых контактов в Outlook
Всем привет! Был у меня телефон на Windows Phone 8.1 и в него я записывал все телефонные контакты, которые по умолчанию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru