Mega Code Archive

 
Categories / Delphi / Forms
 

Read or write in the summary information of an Office document

Title: Read or write in the summary information of an Office document Question: How read or write in the summary information of an Offiche document ? Answer: An Office document file is a structured storage file that an application can read with the StgOpenStorage function from the Windows API. This kind of file is made of storages and streams. COM defines a standard common property set for storing summary information about document. This information is stored in a stream under the root storage. The following function shows how you can get the author property by giving a filename : uses ActiveX, ComObj, SysUtils; function GetSummaryInfAuthor(FileName: TFileName): string; var PFileName: PWideChar; Storage: IStorage; PropSetStg: IPropertySetStorage; PropStg: IPropertyStorage; ps: PROPSPEC; pv: PROPVARIANT; const FMTID_SummaryInformation: TGUID = '{F29F85E0-4FF9-1068-AB91-08002B27B3D9}'; begin PFileName := StringToOleStr(FileName); try // Open compound storage OleCheck(StgOpenStorage(PFileName, nil, STGM_DIRECT or STGM_READ or STGM_SHARE_EXCLUSIVE, nil, 0, Storage)); finally SysFreeString(PFileName); end; // Summary information is in a stream under the root storage PropSetStg := Storage as IPropertySetStorage; // Get the IPropertyStorage OleCheck(PropSetStg.Open(FMTID_SummaryInformation, STGM_DIRECT or STGM_READ or STGM_SHARE_EXCLUSIVE, PropStg)); // We want the author property value ps.ulKind := PRSPEC_PROPID; ps.propid := PIDSI_AUTHOR; // Read this property PropStg.ReadMultiple(1, @ps, @pv); Result := pv.pszVal; end; See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/stgasstg_7agk.asp for more information about the Summary Information Property Set.