Announcement

Collapse
No announcement yet.

mit Delphi auf Outlook-Kalender zugreifen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • mit Delphi auf Outlook-Kalender zugreifen

    Hallo zusammen!

    Ich bin neu hier im Forum und freue mich schon darauf, mit kompetenten Programmieren kommunizieren und evtl. auch selbst Tipps geben zu können.

    Nun zu meiner ersten Frage hier im Forum:
    Zurzeit bin ich auf der Suche nach einer Möglichkeit, von Delphi 5 aus festzustellen, welche Kalender in MS Outlook angelegt sind. Außerdem möchte ich wählen können, in welchen Kalender meine Termine (erzeugt von einem anderen Programm) eingetragen werden sollen. Bisher können diese nur in den Standardkalender gespeichert werden.

    Zur Steuerung von MS Outlook über Delphi 5 verwende ich "TOutlookApplication". Jedoch finde ich nirgendwo eine detailierte Auflistung der zugehörigen Methoden und Attributen.

    Ich habe Mr. Google schon unzählige Male zu diesem Thema befragt, aber leider keine aussagekräftige Antwort erhalten.

    MfG MiheeT

  • #2
    Hallo und Willkommen!

    Also ich verwende diese fertigen Monsterklassen für die Office - Automatisierung eigentlich nicht mehr.
    Ich mache mir eine Variante und greife darüber auf Office zu:

    Code:
    ..
    Interface
    
    Uses ComObj;
    
    Outlook = Variant
    ..
    
    Implementation
    ..
    Outlook = CreateOleObject('Outlook.Application')
    ..
    Das klappt weitestgehend (Office-) versionsunabhängig, sofern MS im VBA nichts generelles geändert hat.
    Neulich rief ein Kunde bei mir an, der mit einem 10 jahre alten Delphi3 - Programm auf Office 2007 zugreift, ich war selber überrascht, das das geht ohne dass ich ihm ein Update verkaufen durfte

    Die von dir gesuchten Methoden und Eigenschaften suche ich vorher noch im VBA aus. Dazu baue ich ein VBA - Makro, das meine Funktion realisiert. Dieses schreibe ich dann in Delphi ab

    Einschränkungen
    - man muss etwas VBA können
    - keine Event - Trigger (hab' ich jedenfalls noch nicht hinbekommen)

    Ansonsten hab ich mir immer die Quelltexte der Office - Serverkomponenten zu gemüte geführt und VIEEEEEL damit herumprobiert.

    Viel Erfolg!
    Tino
    Ich habs gleich!
    ... sagte der Programmierer.

    Comment


    • #3
      Danke für den Tipp.

      Manchmal kann eine Lösung so einfach sein. Dass ich eine universale Variant-Variable verwenden kann, habe ich noch nicht bedacht.

      Mit VBA bzw. mit dem Aufbau von Outlook habe ich mich schon einmal auseinandergesetzt (!sprichwörtlich! ). Demnach war ich relativ schnell wieder auf dem Dampfer.
      Jedoch: Ich bekomme zwar die Anzahl und die Namen der einzelnen, angelegten Kalender und kann auch einen Termin in den DefaultFolder anlegen lassen, aber wie sage ich Outlook "speichere den Termin in meinen zweiten individuellen Kalender"? Hierzu muss es doch auch eine Möglichkeit geben.

      Wenn jemand einen Tipp hat, ich bin ganz Ohr.
      Danke schon mal im Voraus!

      MfG Miheet

      Comment


      • #4
        Hallo,

        den Kalender musste ich mir (zum Glück) noch nicht antun, deshalb mal ins Blaue geraten:
        Es sollte doch für alle diese Dinge einen Container geben, so in der Art

        PHP Code:
        Outlook.Calenders('YourCalender').Items.add()
        oder  
        Outlook
        .Calenders['YourCalender'].Items.add()
        (
        bitte probieren
        Kannst du nicht 'einfach' ein Makro im Outlook erstellen und dann 'reenginieren'?
        Ich habs gleich!
        ... sagte der Programmierer.

        Comment


        • #5
          Vielen Dank für deinen Hinweis, habe es aber in der Zwischenzeit schon selbst herausgefunden.

          Ich habe zwar prinzipiell Nichts gegen VBA und auch nicht gegen die Fernsteuerung von externen (MS Office-) Programmen über Delphi, aber das doch ziemlich unübersichtliche Objekt-Modell von Outlook hat mich doch einiges an Zeit gekostet. Zum Glück ist Word um einiges übersichtlicher geraten.

          Hier meine Lösung, für den (wahrscheinlich unwahrscheinlichen) Fall, dass jemand eines Tages mit dem selben Problem dasteht wie ich:

          PHP Code:
          Sub Procedure()
          Set myOlApp CreateObject("Outlook.Application"
          Set myNameSpace myOlApp.GetNamespace("MAPI")

          //Zugriff auf den allgemeinen Kalenderordner
          Set myFolder myNameSpace.GetDefaultFolder(olFolderCalendar

          //2. Kalender wird ausgewählt
          Set myOwnFolder myFolder.Folders(2

          //in diesem ausgewählten Kalender wird ein neues Item (hier: Termineintrag)
          //erzeugt und in olc gespeichert
          Set olc MyOwnFolder.Items.Add

          //Eigenschaften des neuen (noch leeren) Termins festlegen
          //Vorsicht: es werden hier nicht alle Eigenschaften gefüllt, es gibt noch viele andere
          With olc
          .Subject "Frontdesk 1" //Betreff
          .AllDayEvent False //Ganztägig?
          .Start "13.07.2010 14:30:00" 
          .End "13.07.2010 15:00:00"
          .Duration 30 //Dauer in Minuten unabhängig von Endezeitpunkt
          .Location "Büro" 
          .ResponseRequested True //Erwartet Absender eine Antwort?
          .MeetingStatus olMeeting //Standard-Meeting, auch noch möglich: //abgesagtes Meeting ohne Benachrichtigung (olMeetingCanceled), //Besprechung mit versendeter Einladung (olMeetingReceived) oder einfacher //Termin (olNonMeeting)
          .ReminderSet False //Erinnerung festlegen
          .Save //Abspeichern
          End With

          End Sub 
          Trotzdem Danke für deine Mühe!

          MfG MiheeT

          Comment

          Working...
          X