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

Как заполнить поля формы в MS Word

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



Автор: http://www.swissdelphicenter.ch

uses
  ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  WordApp: OLEvariant;
begin
  Screen.Cursor := crHourglass;
  try
    // Create Word Instance
    WordApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Cannot start MS Word.');
    Screen.Cursor := crDefault;
    Exit;
  end;

  try
    // Open a Word Document
    WordApp.Documents.Add(Template := 'C:\TestDoc.doc');

    // Show Word
    WordApp.Visible := True;

    // Check if FormField exists and asign your text
    if WordApp.ActiveDocument.Bookmarks.Exists('YourFormFieldName') then
      WordApp.ActiveDocument.FormFields.Item('YourFormFieldName').Result :=
        'Your Text';
  finally
    WordApp := Unassigned;
    Screen.Cursor := crDefault;
  end;
end;

Это код-набор на Delphi, демонстрирующий, как заполнить поля форм в документе Microsoft Word с помощью интерфейса автоматизации COM (Component Object Model).

Вот разбивка того, что код делает:

  1. Процедура Button1Click вызывается при клике кнопки с надписью "Button1".
  2. Код создает экземпляр приложения Word с помощью функции CreateOleObject, передавая строку 'Word.Application' как имя класса объекта.
  3. Если создание fails (например, из-за отсутствия MS Word), будет отображаться сообщение об ошибке "Cannot start MS Word.", и код выйдет из процедуры.
  4. Свойство Visible приложения Word устанавливается в True, что делает окно Word видимым.
  5. Код проверяет, существует ли закладка (bookmark) с именем "YourFormFieldName" в активном документе с помощью метода Bookmarks.Exists. Если она есть, код устанавливает значение поля формы с тем же именем на 'Your Text' с помощью свойства FormFields.Item.

Обратите внимание, что вам нужно заменить 'C:\TestDoc.doc' на реальный путь и имя вашего файла Word-документа, а также 'YourFormFieldName' на реальное имя поля формы, которое вы хотите заполнить.

Вот альтернативное решение с более современным подходом:

Вместо создания нового экземпляра приложения Word каждый раз, когда кнопка кликается, можно создать singleton-экземпляр, который сохраняется между несколькими использованиями. Это можно достичь с помощью класса TWordApp из единицы Vcl.Word:

uses
  Vcl.Word;

type
  TWordApp = class(TObject)
  private
    FWordApp: OLEVariant;
  public
    constructor Create; override;
    destructor Destroy; override;
    procedure FillFormField(const DocPath, FormFieldName, TextFieldValue: string);
  end;

implementation

constructor TWordApp.Create;
begin
  inherited Create;
  FWordApp := CreateOleObject('Word.Application');
end;

destructor TWordApp.Destroy;
begin
  FWordApp := Unassigned;
  inherited Destroy;
end;

procedure TWordApp.FillFormField(const DocPath, FormFieldName, TextFieldValue: string);
var
  WordDoc: OLEVariant;
begin
  WordDoc := FWordApp.Documents.Open(DocPath);
  try
    if WordDoc.Bookmarks.Exists(FormFieldName) then
      WordDoc.FormFields.Item(FormFieldName).Result := TextFieldValue;
  finally
    WordDoc.Close;
  end;
end;

var
  MyWordApp: TWordApp;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Screen.Cursor := crHourglass;
  try
    MyWordApp.FillFormField('C:\TestDoc.doc', 'YourFormFieldName', 'Your Text');
  finally
    Screen.Cursor := crDefault;
  end;
end;

Этот подход более эффективен и легче поддерживать, потому что вы не должны создавать экземпляр приложения Word каждый раз. Вы также можете добавить дополнительные функции в класс TWordApp, чтобы обрабатывать ошибки и другие сценарии.

Статья описывает, как заполнить поля формы в MS Word с помощью программирования на языке Delphi, используя библиотеку ComObj и создавая офисное приложение Word.


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

Получайте свежие новости и обновления по 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 05:51:49/0.0038390159606934/1