Как прочитать/изменить свойства Word документа?

Previous  Top  Next

    
 

 

 

Code:

{ 1. Change MS Word properties via OLE }

 

uses

ComObj;

 

procedure TForm1.Button1Click(Sender: TObject);

const

wdPropertyTitle = $00000001;

wdPropertySubject = $00000002;

wdPropertyAuthor = $00000003;

wdPropertyKeywords = $00000004;

wdPropertyComments = $00000005;

wdPropertyTemplate = $00000006;

wdPropertyLastAuthor = $00000007;

wdPropertyRevision = $00000008;

wdPropertyAppName = $00000009;

wdPropertyTimeLastPrinted = $0000000A;

wdPropertyTimeCreated = $0000000B;

wdPropertyTimeLastSaved = $0000000C;

wdPropertyVBATotalEdit = $0000000D;

wdPropertyPages = $0000000E;

wdPropertyWords = $0000000F;

wdPropertyCharacters = $00000010;

wdPropertySecurity = $00000011;

wdPropertyCategory = $00000012;

wdPropertyFormat = $00000013;

wdPropertyManager = $00000014;

wdPropertyCompany = $00000015;

wdPropertyBytes = $00000016;

wdPropertyLines = $00000017;

wdPropertyParas = $00000018;

wdPropertySlides = $00000019;

wdPropertyNotes = $0000001A;

wdPropertyHiddenSlides = $0000001B;

wdPropertyMMClips = $0000001C;

wdPropertyHyperlinkBase = $0000001D;

wdPropertyCharsWSpaces = $0000001E;

const

AWordDoc = 'C:\Test.doc';

wdSaveChanges = $FFFFFFFF;

var

WordApp: OLEVariant;

SaveChanges: OleVariant;

begin

try

   WordApp := CreateOleObject('Word.Application');

except

   // Error....

   Exit;

end;

try

   WordApp.Visible := False;

   WordApp.Documents.Open(AWordDoc);

   WordApp.ActiveDocument.BuiltInDocumentProperties[wdPropertyTitle].Value := 'Your Title...';

   WordApp.ActiveDocument.BuiltInDocumentProperties[wdPropertySubject].Value := 'Your Subject...';

   // ...

   // ...

finally

   SaveChanges := wdSaveChanges;

   WordApp.Quit(SaveChanges, EmptyParam, EmptyParam);

end;

end;

 

 

 

 

Code:

{

2. Read MS Word properties via Structured Storage.

by Serhiy Perevoznyk

}

uses

ComObj, ActiveX;

 

const

FmtID_SummaryInformation: TGUID =

   '{F29F85E0-4FF9-1068-AB91-08002B27B3D9}';

 

function FileTimeToDateTimeStr(F: TFileTime): string;

var

LocalFileTime: TFileTime;

SystemTime: TSystemTime;

DateTime: TDateTime;

begin

if Comp(F) = 0 then Result := '-'

else

begin

   FileTimeToLocalFileTime(F, LocalFileTime);

   FileTimeToSystemTime(LocalFileTime, SystemTime);

   with SystemTime do

     DateTime := EncodeDate(wYear, wMonth, wDay) +

       EncodeTime(wHour, wMinute, wSecond, wMilliseconds);

   Result := DateTimeToStr(DateTime);

end;

end;

 

function GetDocInfo(const FileName: WideString): string;

var

I: Integer;

PropSetStg: IPropertySetStorage;

PropSpec: array[2..19] of TPropSpec;

PropStg: IPropertyStorage;

PropVariant: array[2..19] of TPropVariant;

Rslt: HResult;

S: string;

Stg: IStorage;

begin

Result := '';

try

   OleCheck(StgOpenStorage(PWideChar(FileName), nil, STGM_READ or

     STGM_SHARE_DENY_WRITE,

     nil, 0, Stg));

   PropSetStg := Stg as IPropertySetStorage;

   OleCheck(PropSetStg.Open(FmtID_SummaryInformation,

     STGM_READ or STGM_SHARE_EXCLUSIVE, PropStg));

   for I := 2 to 19 do

   begin

     PropSpec[I].ulKind := PRSPEC_PROPID;

     PropSpec[I].PropID := I;

   end;

   Rslt := PropStg.ReadMultiple(18, @PropSpec, @PropVariant);

   OleCheck(Rslt);

   if Rslt <> S_FALSE then for I := 2 to 19 do

     begin

       S := '';

       if PropVariant[I].vt = VT_LPSTR then

         if Assigned(PropVariant[I].pszVal) then

           S := PropVariant[I].pszVal;

       case I of

         2:  S  := Format('Title: %s', [S]);

         3:  S  := Format('Subject: %s', [S]);

         4:  S  := Format('Author: %s', [S]);

         5:  S  := Format('Keywords: %s', [S]);

         6:  S  := Format('Comments: %s', [S]);

         7:  S  := Format('Template: %s', [S]);

         8:  S  := Format('Last saved by: %s', [S]);

         9:  S  := Format('Revision number: %s', [S]);

         10: S := Format('Total editing time: %g sec',

             [Comp(PropVariant[I].filetime) / 1.0E9]);

         11: S := Format('Last printed: %s',

             [FileTimeToDateTimeStr(PropVariant[I].filetime)]);

         12: S := Format('Create time/date: %s',

             [FileTimeToDateTimeStr(PropVariant[I].filetime)]);

         13: S := Format('Last saved time/date: %s',

             [FileTimeToDateTimeStr(PropVariant[I].filetime)]);

         14: S := Format('Number of pages: %d', [PropVariant[I].lVal]);

         15: S := Format('Number of words: %d', [PropVariant[I].lVal]);

         16: S := Format('Number of characters: %d',

             [PropVariant[I].lVal]);

         17:; // thumbnail

         18: S := Format('Name of creating application: %s', [S]);

         19: S := Format('Security: %.8x', [PropVariant[I].lVal]);

       end;

       if S <> '' then Result := Result + S + #13;

     end;

finally

end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

if Opendialog1.Execute then

   ShowMessage(GetDocInfo(opendialog1.FileName));

end;

 

 

 

©Drkb::04410

Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php