Autor Beitrag
eagle1985
Hält's aus hier
Beiträge: 15


C# (MS Visual C#2008 Express Edition)
BeitragVerfasst: Di 03.01.06 15:34 
Hallo zusammen

ich möchte aus einem Delphi-Programm alle Dokumente einer Sammelmappe in ein Verzeichnis lösen.
Nun muss ich dafür die Sammelmappe öffnen.
Habe nun folgendes Versucht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TdSammelmappeArch.getObjectsFromBinder;
var
  binderObject : OleVariant;
//  counter : Integer;
  BoolVariant_False: OleVariant;
  tmpPath : String;
begin
  //
  tmpPath := 'C:\Data\binder-test\TestSammelmappe.obd';
  BoolVariant_False := WordBool(False);
  (IUnknown(binderObject) as Binder).Open(tmpPath, BoolVariant_False);

  {
  for counter := 0 to (IUnknown(objekt) as Binder).Sections.Count do
  begin
    ShowMessage((IUnknown(objekt) as Binder).Sections.Get_Item(counter).Name);
  end;
  }

end;

Dabei erscheint immer eine Fehlermeldung mit folgendem Text:
Meldung: 'Zugriffsverletzung bei Adresse 00402885 in Modul Arch.exe'. Lesen von Adresse 00000000.

Hat jemand eine Idee woran dies Liegen kann oder einen alternativen Vorschlag wie ich dies Lösen kann?

Achja das Sammelmappen-Objekt existiert, im Windows kann es einfach per Doppelklick geöffnet werden.

greez

eagle
eagle1985 Threadstarter
Hält's aus hier
Beiträge: 15


C# (MS Visual C#2008 Express Edition)
BeitragVerfasst: Do 05.01.06 10:50 
habs inzwischen selber gelöst, hab vergessen das binderObject zu erzeugen
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 05.01.06 11:01 
Dann poste doch die Lösung hier im Forum. Dann haben wir alle etwas davon. ;-)

_________________
Ein Nutzer der Ecke ;-)
eagle1985 Threadstarter
Hält's aus hier
Beiträge: 15


C# (MS Visual C#2008 Express Edition)
BeitragVerfasst: Do 05.01.06 12:00 
Kein Problem nun sieht es folgendermasen aus:

ausblenden volle Höhe Delphi-Quelltext
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:
  // binder öffnen
  binderObject := CoBinder.Create;
  try
    tmpPath := strTempPath + '\TestSammelmappe.obd';
    BoolVariant_False := WordBool(False);

    (IUnknown(binderObject) as Binder).Open(tmpPath, BoolVariant_False);
    maxCounter:= (IUnknown(binderObject) as Binder).Sections.Count;
    for counter := 1 to maxCounter do
    begin
      ShowMessage(IntToStr(counter));
      tmpSection := (IUnknown(binderObject) as Binder).Sections.Item[counter];
      with (IUnknown(tmpSection) as Section) do
      begin
        if(Type_ = WORD) then
        begin
          SaveAs(strTempPath + '\' + Name + '.doc');
        end else if(Type_ = EXCEL) then
        begin
          SaveAs(strTempPath + '\' + Name + '.xls');
        end else if(Type_ = POWERPOINT) then
        begin
          SaveAs(strTempPath + '\' + Name + '.ppt');
        end else
        begin
          ShowMessage(Name + ' wird nicht Archiviert');
        end;
      end;
    end;
  finally
    (IUnknown(binderObject) as Binder).Close(EmptyParam, EmptyParam);
  end;


wobei noch folgende Konstanten definiert sind:
ausblenden Delphi-Quelltext
1:
2:
3:
  const WORD : String = 'Word.Document.8';
  const POWERPOINT : String = 'PowerPoint.Show.8';
  const EXCEL : String = 'Excel.Sheet.8';


Eigentlich ein doofer Fehler, habe wie gesagt nur das CoBinder.Create vergessen