Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Outlook Kalender lesen und schreiben (https://www.delphipraxis.net/162614-outlook-kalender-lesen-und-schreiben.html)

Kevin11 31. Aug 2011 11:01

Outlook Kalender lesen und schreiben
 
Hallo,

wie kann ich Daten aus dem Outlook Kalender lesen und schreiben?

Habe es so einmal probiert:
Delphi-Quellcode:
unit send_to_outlook;

interface

uses
  Windows, Messages, SysUtils, StrUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ShellAPI, Grids, ComCtrls, ComObj, ShellCtrls, jpeg;

type
  TCalendar = record
    Start:     string;
    Ende:      string;
    Categories: string;
    Subject:   string;
    Body:      string;
   
    // ###  Further properties. See MSDN
  end;

type
    TForm1 = class(TForm)
    LabelDatum: TLabel;
    Button1: TButton;
    Startzeit: TDateTimePicker;
    Endzeit: TDateTimePicker;
    LabelStart: TLabel;
    LabelEnde: TLabel;
    LabelBetreff: TLabel;
    LabelKategorie: TLabel;
    LabelBeschreibung: TLabel;
    Datum: TDateTimePicker;
    Betreff: TEdit;
    Kategorie: TEdit;
    Beschreibung: TMemo;

    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Datum.Date := Date;
end;

procedure OutlookAddCalendar(CalendarFolderPath : string; Calendar : TCalendar);
const
  olFolderCalendars = $00000009;
var
  Outlook : OleVariant;
  NameSpace : OleVariant;
  CalendarsRoot : OleVariant;
  CalendarsFolder : OleVariant;
  OutlookCalendar : OleVariant;
  SubFolderName : string;
  Position : integer;
  Found : boolean;
  Counter : integer;
  TestCalendarFolder : OleVariant;

begin
  // Connect to outlook
  Outlook := CreateOleObject('Outlook.Application');
  // Get name space
  NameSpace := Outlook.GetNameSpace('MAPI');
  // Get root Calendars folder
  CalendarsRoot := NameSpace.GetDefaultFolder(olFolderCalendars);
  // Iterate to subfolder
  CalendarsFolder := CalendarsRoot;
  while CalendarFolderPath <> '' do
  begin
    // Extract next subfolder
    Position := Pos('\', CalendarFolderPath);
    if Position > 0 then
    begin
      SubFolderName := Copy(CalendarFolderPath, 1, Position - 1);
      CalendarFolderPath := Copy(CalendarFolderPath, Position + 1, Length(CalendarFolderPath));
    end
    else
    begin
      SubFolderName := CalendarFolderPath;
      CalendarFolderPath := '';
    end;
    if SubFolderName = '' then
      Break;
    // Search subfolder
    Found := False;
    for Counter := 1 to CalendarsFolder.Folders.Count do
    begin
      TestCalendarFolder := CalendarsRoot.Folders.Item(Counter);
      if LowerCase(TestCalendarFolder.Name) = LowerCase(SubFolderName) then
      begin
        CalendarsFolder := TestCalendarFolder;
        Found := True;
        Break;
      end;
    end;
    // If not found create
    if not Found then
      CalendarsFolder := CalendarsFolder.Folders.Add(SubFolderName);
  end;
  // Create Calendar item
  OutlookCalendar := CalendarsFolder.Items.Add;
  // Fill Calendar information

  OutlookCalendar.Start := Calendar.Start;
  OutlookCalendar.End := Calendar.Ende;
  OutlookCalendar.Categories := Calendar.Categories;
  OutlookCalendar.Subject := Calendar.Subject;
  OutlookCalendar.Body := Calendar.Body;

  // ### Further properties

  // Save Calendar
  OutlookCalendar.Save;
  // Disconnect from outlook
  Outlook := Unassigned;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Ordner: string;
  Calendar: TCalendar;
begin
  Ordner := 'Test-Ordner';
  Calendar.Start      := DateToStr(Datum.DateTime) + ' ' + TimeToStr(Startzeit.DateTime);
  Calendar.Ende       := DateToStr(Datum.DateTime) + ' ' + TimeToStr(Endzeit.DateTime);
  Calendar.Categories := Kategorie.Text;
  Calendar.Subject    := Betreff.Text;
  Calendar.Body       := Beschreibung.Text;
  OutlookAddCalendar(Ordner,Calendar);
end;



end.
Code ist von hermidelphi.

Es kommen folgende Fehler:
1. Starten des Servers fehlgeschlagen
2. Starten des Servers fehlgeschlagen, ProgID: "Outlook.Application".

Es wäre schön wenn mir jemand Zeitnah helfen könnte.

Viele Dank und schöne Grüße.

Chemiker 31. Aug 2011 18:48

AW: Outlook Kalender lesen und schreiben
 
Hallo Kevin11,

vielleicht hilft das weiter: http://www.delphipraxis.net/1078732-post16.html

Bis bald Chemiker

Kevin11 2. Sep 2011 07:18

AW: Outlook Kalender lesen und schreiben
 
Hallo Chemiker,

du hast nicht zufällig einen Code, der die Daten von Outlook ausliest? Ich habe das ganze mit D10 in eine VM gepackt und dort funktioniert es wunderbar.

Edit: Auslesen klappt hervorragend. Jetzt stoße ich nur auf so eine dumme Outlook-Meldung:

Programm versucht, auf Ihre in Outlook gespeicherten E-Mail-Adressinformationen zuzugreifen. Geschieht dies unerwartet, klicken Sie auf 'Verweigern'. Überprüfen Sie, ob Sie die aktuellste Version der Antivirusprogramms haben.

Wie kann ich diese Meldung umgehen? Ist nämlich tierrisch nervig bei jedem Aufruf auf Erteilen zu klicken.

Vielen Dank und Gruß
Kevin11

:thumb:

ulli007 3. Apr 2016 20:57

AW: Outlook Kalender lesen und schreiben
 
ich weis, der Thread ist jetzt schon was älter,

aber ich habe das Problem das ich nur den "Kalender" auslesen kann, wie schaffe ich das ich einen freigegebenen Kalender auswähle?

Kann mir da einer Helfen? Kann auch sein das ich da jetzt etwas aufm schlauch steh... :-)


Danke

PS: Outlook2016

Delphi-Quellcode:

var
  outlook, NameSpace,calendarfolder, Termine, Termin,topfolder: OleVariant;
  i: Integer;
begin
  outlook := CreateOleObject('Outlook.Application');
  NameSpace := outlook.GetNameSpace('MAPI');
  TopFolder := NameSpace.Folders[1];
  CalendarFolder := TopFolder.Folders('Kalender');
  Termine := NameSpace.GetDefaultFolder($00000009);

  for i := 1 to Termine.Items.Count do
  begin
    Termin := Termine.Items.Item(i);
    // Titel des Termins und Startdatum mit Zeit auslesen:
    memo1.lines.add(DateTimeToStr (Termin.Start) + ' bis ' + DateTimeToStr (Termin.End)+ ': ' + Termin.Subject + ', ' + Termin.Location + ', ' + Termin.Body );
  end;

  Outlook := UnAssigned;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz