AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Informationen aus MS Office

Ein Thema von poy · begonnen am 19. Dez 2002 · letzter Beitrag vom 25. Jul 2007
Antwort Antwort
poy

Registriert seit: 19. Dez 2002
Ort: CH
21 Beiträge
 
Delphi 7 Architect
 
#1

Informationen aus MS Office

  Alt 19. Dez 2002, 15:22


Ich muss ein Programmschreiben, welches den Titel, den Autor und den Komentar aus einem Word, Excel und Power Point File rauslesen. Ist es möglich dies zu tun ohne das entsprechende Programm zu starten, sondern direkt aus dem abgespeicherten File zu lesen?
Toll wäre ein Dokumentiertes Sourcebeispiel.

  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2
  Alt 19. Dez 2002, 15:53
Hier die gewünschte Lösung
Delphi-Quellcode:
uses
  ActiveX, ComObj;

procedure GetDocInfo(aFileName: String; Lines: TStrings);
const
  FMTID_SummaryInformation: TGUID = '{F29F85E0-4FF9-1068-AB91-08002B27B3D9}';
type
  TPropSpecArray = array[0..1000] of TPropSpec;
  PPropSpecArray = ^TPropSpecArray;
  TPropVariantArray = array[0..1000] of TPropVariant;
  PPropVariantArray = ^TPropVariantArray;
var
  stgRoot: IStorage;
  stgPS: IPropertySetStorage;
  stgP: IPropertyStorage;
  ps: PPropSpecArray;
  pv: PPropVariantArray;
begin
  Lines.Clear;
  OleCheck(StgOpenStorage(PWideChar(WideString(aFileName)), nil, STGM_READ or
      STGM_SHARE_EXCLUSIVE, nil, 0, stgRoot));
  stgPS := stgRoot as IPropertySetStorage;
  OleCheck(stgPS.Open(FMTID_SummaryInformation, STGM_READ or
      STGM_SHARE_EXCLUSIVE, stgP));
  ps := nil;
  pv := nil;
  GetMem(ps, SizeOf(TPropSpecArray));
  GetMem(pv, SizeOf(TPropVariantArray));
  try
    ps[0].ulKind := PRSPEC_PROPID;
    ps[0].propid := PIDSI_TITLE;
    ps[1].ulKind := PRSPEC_PROPID;
    ps[1].propid := PIDSI_COMMENTS;
    ps[2].ulKind := PRSPEC_PROPID;
    ps[2].propid := PIDSI_AUTHOR;
    OleCheck(stgP.ReadMultiple(3, @ps[0], @pv[0]));
    Lines.Add('Titel: ' + pv[0].pszVal);
    Lines.Add('Kommentar: ' + pv[1].pszVal);
    Lines.Add('Autor: ' + pv[2].pszVal);
  finally
    FreeMem(ps);
    FreeMem(pv);
  end;
end;
weitere Werte für propid
Code:
const
  // Property IDs for the SummaryInformation Property Set
  {$EXTERNALSYM PIDSI_TITLE}
  PIDSI_TITLE              = $00000002; // VT_LPSTR
  {$EXTERNALSYM PIDSI_SUBJECT}
  PIDSI_SUBJECT            = $00000003; // VT_LPSTR
  {$EXTERNALSYM PIDSI_AUTHOR}
  PIDSI_AUTHOR             = $00000004; // VT_LPSTR
  {$EXTERNALSYM PIDSI_KEYWORDS}
  PIDSI_KEYWORDS           = $00000005; // VT_LPSTR
  {$EXTERNALSYM PIDSI_COMMENTS}
  PIDSI_COMMENTS           = $00000006; // VT_LPSTR
  {$EXTERNALSYM PIDSI_TEMPLATE}
  PIDSI_TEMPLATE           = $00000007; // VT_LPSTR
  {$EXTERNALSYM PIDSI_LASTAUTHOR}
  PIDSI_LASTAUTHOR         = $00000008; // VT_LPSTR
  {$EXTERNALSYM PIDSI_REVNUMBER}
  PIDSI_REVNUMBER          = $00000009; // VT_LPSTR
  {$EXTERNALSYM PIDSI_EDITTIME}
  PIDSI_EDITTIME           = $0000000a; // VT_FILETIME (UTC)
  {$EXTERNALSYM PIDSI_LASTPRINTED}
  PIDSI_LASTPRINTED        = $0000000b; // VT_FILETIME (UTC)
  {$EXTERNALSYM PIDSI_CREATE_DTM}
  PIDSI_CREATE_DTM         = $0000000c; // VT_FILETIME (UTC)
  {$EXTERNALSYM PIDSI_LASTSAVE_DTM}
  PIDSI_LASTSAVE_DTM       = $0000000d; // VT_FILETIME (UTC)
  {$EXTERNALSYM PIDSI_PAGECOUNT}
  PIDSI_PAGECOUNT          = $0000000e; // VT_I4
  {$EXTERNALSYM PIDSI_WORDCOUNT}
  PIDSI_WORDCOUNT          = $0000000f; // VT_I4
  {$EXTERNALSYM PIDSI_CHARCOUNT}
  PIDSI_CHARCOUNT          = $00000010; // VT_I4
  {$EXTERNALSYM PIDSI_THUMBNAIL}
  PIDSI_THUMBNAIL          = $00000011; // VT_CF
  {$EXTERNALSYM PIDSI_APPNAME}
  PIDSI_APPNAME            = $00000012; // VT_LPSTR
  {$EXTERNALSYM PIDSI_DOC_SECURITY}
  PIDSI_DOC_SECURITY       = $00000013; // VT_I4
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3
  Alt 19. Dez 2002, 16:01
Noch ein wenig Theorie zur Lösung.

Alle MS Office Dokumente basieren auf der Idee von Structured Storage. In diesen Dokumente sind alle Daten in zugeordneten Streams gespeichert. Das ganze funktioniert ähnlich wie ein komplettes Dateisystem innerhalb einer Datei. Daher kann oben genannte Lösung nicht nur für MS Office Dokumente, sondern auch für Dokumente andere Anwendungen genutzt werden, sofern diese das Structure Storage Format nutzen.

Structure Storage wird aber nur auf Windows System ab Win95 nativ unterstützt. Die Definitionen für StSt sind ab Delphi 4 in der ActiveX unit gespeichert, für Delphi 3 müssen diese komplett von Hand erstellt werden.

Weitere Infos findet Ihr im Buch Delphi(TM) COM Programming von Eric Harmon, aus welchem auch die Vorlage für obige Löäsung stammt.
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
poy

Registriert seit: 19. Dez 2002
Ort: CH
21 Beiträge
 
Delphi 7 Architect
 
#4

Danke

  Alt 20. Dez 2002, 08:43

Danke hat mir sehr weitergeholfen
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#5

Re: Danke

  Alt 20. Dez 2002, 10:58
Zitat von poy:
Danke hat mir sehr weitergeholfen
Das freut mich - bis bald und ein "Frohes Fest" und einen "Guten Rutsch".
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Matt

Registriert seit: 13. Nov 2003
Ort: Hamburg
212 Beiträge
 
#6

Re: Informationen aus MS Office

  Alt 25. Jul 2007, 14:49
Hallo DPler,

seid SP2 von Windows XP bekomme ich bei dieser Function immer ein:

EOLESYSERROR: Access denied

Nehme mal an, dass das an den neuen Sicherheitsregeln liegt.
Hat jemand schon eine Lösung, wie man diese Funktion wieder zum laufen bekommt?

Vielen Dank!

Grüße aus HH
Matt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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