Главная страницаОбратная связьКарта сайта

Как прочитать или изменить свойства 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", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!
   


Copyright © 2008 - 2024 Дискета.info