Centrum skryptów - Microsoft office

Jak zapisać wszystkie kontakty jako wizytówki VCard?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak zapisać wszystkie kontakty jako wizytówki VCard?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak mogę zapisać wszystkie swoje kontakty jako wizytówki VCard?

--ET

Cześć Skrypciarze! Odpowiedź

Cześć, ET. Na początek dobre wieści: z okazji osiemsetnego artykułu naszej serii, postanowiłem zapomnieć wszelkie niesnaski i pogodzić się nawet z najgorszymi wrogami. Tak więc ogłaszam zakończenie strajku anegdotowego, uznając się jednocześnie za zwycięzcę moralnego tego konfliktu. Zaczynamy zupełnie nową serię żartów, anegdot i dowcipów. Na początek: jak wyglądałyby artykuły z serii Cześć Skrypciarze pisane przez Redaktorkę? Tak:

No sie ma, ET. Ale to zabawne, masz inicjały jak ten stworek z filmu o kosmitach… Jak się on nazywał? Darth Vader? Nie, to by było DV… Może Robocop? Nie, to nie było o kosmitach… Słuchaj, może odłożymy skrypty na jutro, a dziś pogadamy o czymś ciekawszym? Może na początek pisownia cząstki „by” z czasownikami!

Cóż, może na tym skończmy i oddajmy głos prawdziwym specjalistom, którzy wiedzą, że ET był kosmitą z Marsa, który wysadził w powietrze Biały Dom za pomocą promienia śmierci i zginął wskutek zastosowania przez Ziemian bakterii komputerowych. Czy tam wirusów, nieważne. Zajmijmy się lepiej wizytówkami VCard:

On Error Resume Next



Const olFolderContacts = 10

Const olVCard = 6



Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")



Set colContacts = objNamespace.GetDefaultFolder(olFolderContacts).Items



For Each objContact In colContacts

    strName = objContact.FirstName & objContact.LastName

    strPath = "C:\Test\" & strName & ".vcf"

    objContact.SaveAs strpath, olVCard

Next

Jak widzisz, ET, skrypt zaczyna się od zastosowania instrukcji On Error Resume Next. Podczas pracy z kontaktami bardzo łatwo o trudne do wyjaśnienia błędy, które szczerze mówiąc nie mają za dużo sensu. Na przykład skrypt może przestać działać, wyświetlając komunikat, że zwykła nazwa właściwości kontaktu (np.FirstName) jest nieprawidłowa. Nie wiem, czy ten problem pojawia się u wszystkich użytkowników, czy tylko coś jest nie tak z moją kopią programu Outlook; tak czy siak, dodanie instrukcji On Error Resume Next rozwiązuje problem u mnie, a na pewno nikomu nie szkodzi.

Pierwszy fragment rzeczywistego kodu służy zdefiniowaniu dwu stałych: olFolderContacts, wskazjącej folder programu Outlook, z którym chcemy pracować; oraz olVCard, wskazująca format pliku, który ma zostać użyty do zapisania informacji kontaktowych. Po zdefiniowaniu tych zmiennych tworzymy wystąpienie obiektu Outlook.Application, a następne za pomocą poniższego wiersza kodu łączymy się z obszarem nazw MAPI (jest to krok wymagany, co jest o tyle dziwne, że MAPI to jedyny obszar nazw, z którym się możemy połączyć):

Set objNamespace = objOutlook.GetNamespace("MAPI")

Połączywszy się z programem Outlook możemy użyć poniższego wiersza kodu, by za pomocą metody GetDefaultFolder pobrać kolekcję wszystkich elementów znajdujących się w folderze Contacts:

Set colContacts = objNamespace.GetDefaultFolder(olFolderContacts).Items

Prościzna!

Najlepsze, że reszta skryptu wcale nie jest trudniejsza. Teraz musimy uruchomić pętlę For Each, która przejdzie przez naszą kolekcję kontaktów. Jak wszyscy, a przynajmniej niektórzy, wiedzą – VCard to po prostu format pliku. Oznacza to, że nie możemy zapisać informacji kontaktowych jako wizytówki VCard, jeśli nie podamy kompletnej ścieżki dostępu do tworzonego pliku; dlatego też używamy poniższego wiersza kodu, by przypisać wartości właściwości FirstName i LastName do zmiennej, którą nazwaliśmy strName:

strName = objContact.FirstName & objContact.LastName

Jeśli mamy kontakt o nazwie Ken Myer, uzyskamy plik wyglądający tak:

KenMyer

Mając unikatową nazwę pliku, możemy utworzyć kompletną ścieżkę:

strPath = "C:\Test\" & strName & ".vcf"

Nie ma tu nic szczególnie skomplikowanego: łączymy po prostu ścieżkę folderu C:\Test\ z wartością zmiennej strName i ciągiem znaków .vcf, który odpowiada rozszerzeniu pliku VCard. Teraz możemy utworzyć wizytówkę VCard dla pierwszego z naszych kontaktów, wywołując w tym celu metodę SaveAs i przekazując ścieżkę pliku (zmienna strPath) oraz stałą olVCard jako parametry:

objContact.SaveAs strpath, olVCard
Ważne. Ze względu na to, że utworzenie wizytówki VCard wymaga dostępu do adresu pocztowego danego kontaktu, skrypt nie zadziała natychmiast. Program Outlook wyświetli komunikat informujący, że skrypt usiłuje uzyskać dostęp do danych adresowych i monitujący o zgodę. Należy kliknąć „Tak” (albo „Zezwól”), aby skrypt mógł się uruchomić. Nie można tego niestety obejść ani zautomatyzować bez zmiany konfiguracji programu Exchange.

Teraz możemy ponownie uruchomić pętlę i powtórzyć proces dla kolejnego kontaktu w kolekcji. Na koniec folder C:\Test powinien zawierać grupę plików taką jak ta:

KenMyer.vcf

JonathanHaas.vcf

PilarAckerman.vcf

I to już wszystko, ET. Miejmy nadzieję, że o to właśnie Ci chodziło.

 Do początku strony Do początku strony

Centrum skryptów - Microsoft office