Как прочитать или изменить свойства Word документа 2
Автор: http://www.swissdelphicenter.ch
{
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 ;
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Как прочитать или изменить свойства Word документа 2", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:
Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи , в сообщение обязательно указывайте название или ссылку на статью!