Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Технологии , OLE Automation MSOffice



Автор: 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;

Программа на Delphi, которая читает свойства файлов Microsoft Word, используя Structured Storage, и отображает их в сообщении.

Вот разбивка кода:

  • Функция FileTimeToDateTimeStr конвертирует время файла (представленное как TFileTime) в строку формата "YYYY-MM-DD HH:MM:SS.SSS".
  • Функция GetDocInfo читает свойства документа Word, используя Structured Storage. Она открывает хранение для документа, затем открывает свойство для суммарной информации (fmtid {F29F85E0-4FF9-1068-AB91-08002B27B3D9}). Затем она читает несколько свойств одновременно и конвертирует их в строки.
  • Событийный обработчик Button1Click использует компонент OpenDialog для открытия диалога выбора файла, и если пользователь выбирает файл, он вызывает функцию GetDocInfo с выбранным именем файла и отображает результат в сообщении.

Свойства, которые читаются этим программой, следующие: * Title * Subject * Author * Keywords * Comments * Template * Last saved by * Revision number * Total editing time * Last printed * Create time/date * Last saved time/date * Number of pages * Number of words * Number of characters * Name of creating application * Security

Эта программа использует units ComObj и ActiveX для взаимодействия с документом Word, который является объектом COM (Component Object Model). Функция StgOpenStorage открывает хранение для документа, а метод PropSetStg.Open открывает свойство для суммарной информации.

Программа использует функцию OleCheck для проверки возвращаемого значения методов COM, что необходимо потому, что методы COM могут выбрасывать исключения, если они неудачны. Переменная Result используется для накопления свойств, прочитанных из документа, а процедура ShowMessage отображает результат в сообщении.

Обратите внимание, что эта программа требует установки Microsoft Word на системе, потому что она использует формат файла Word для чтения свойств.

Статья 'Как прочитать или изменить свойства Word документа' описывает способ чтения и изменения свойств Microsoft Word-документа 2 с помощью программирования на языке Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OLE Automation MSOffice ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:26:46/0.022691011428833/1