Forum
Grundkurs
»Introduktion
»Snabbguide
»Komponenter
»Händelser
»Strängar
»Räkna med Delphi »Egna
typer
»Selektion
»Iteration
»Menyer
»Funktioner
»Arraystrukturer
Tips & Tricks
»Nya tips
»Blandat
»Databaser
»Filer
»Forms
»Grafik
»Internet
»Komponenter
»Matematik
»Multimedia
»Objekt/ActiveX
»Skrivare
»Strängar
»System
»Mest lästa tips
Artiklar
»Delphi och ADO
»Bygga en DLL
»Skapa en enkel rapport
»Hantera registret
»Enheter, units
»Klassen TCanvas
»Använd LookUp Controls
Nya
tips
Lägg
till tips
Delphilänkar
Gästbok
|
|
|
|
Ändra/läs egenskaperna för ett Worddokument
|
Kategori: Objekt/ActiveX
Inlagt: 2005-06-30
Läst: 1285
Inlagt av: Staffan Berg
|
Beskrivning |
Ändra egenskaperna för ett Microsoft Word-dokument via OLE med nedanstående exempel.
|
Kod |
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; {**********************************************} { 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;
|
|
|