Шаг 48.
Автоматизация Microsoft Word. Чтение текста из документа

    На этом шаге мы рассмотрим способы чтения из документа.

    Рассмотрим чтение текста из открытого документа Word. Создадим новую кнопку и в процедуре обработки ее нажатия напишем следующий код.

procedure TForm1.Button2Click(Sender: TObject);
//Чтение документа
begin
   Memo1.Text:=W.ActiveDocument.Range.Text;
end;

    На рисунке 1 представлен результат работы этого кода.


Рис.1. Чтение текста из документа

    Полный текст приложения:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComObj, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  W:Variant;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//Открытие документа Word
begin
  W:=CreateOleObject('Word.Application');
  if OpenDialog1.Execute then
   Begin
      W.Documents.Open(OpenDialog1.FileName);
      W.Visible:=True;
   End;
end;

procedure TForm1.Button2Click(Sender: TObject);
//Чтение документа
begin
   Memo1.Text:=W.ActiveDocument.Range.Text;
end;

end.
Текст этого приложения можно взять здесь (5,4 Кб).

    Если требуется экспортировать в программу-контроллер очень большой текст, то можно работать с его фрагментами в документе. Для этого используйте процедуру Range(first, last), где first, last - границы диапазона (позиции символов), в котором находится рабочий фрагмент.

    Другой способ чтения текста документа основан на чтении слов.


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

    Рассмотрим коллекцию Words слов документа. Синтаксис может быть таким:

    W.ActiveDocument.Words

    Эта коллекция включает в себя слова объекта-хозяина. В следующем примере коллекция Words содержит все слова активного документа.

procedure TForm1.Button2Click(Sender: TObject);
//Чтение слов документа
var i:Integer;
begin
  Memo1.Lines.Clear;
  for i:=1 to W.ActiveDocument.Words.count do
     Memo1.Lines.Add(W.ActiveDocument.Words.item(i).Text);
end;

    Результат работы приложения изображен на рисунке 2:


Рис.2. Результат работы приложения

    Полный текст приложения:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComObj, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  W:Variant;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//Открытие документа Word
begin
  W:=CreateOleObject('Word.Application');
  if OpenDialog1.Execute then
   Begin
      W.Documents.Open(OpenDialog1.FileName);
      W.Visible:=True;
   End;
end;

procedure TForm1.Button2Click(Sender: TObject);
//Чтение слов документа
var i:Integer;
begin
  Memo1.Lines.Clear;
  for i:=1 to W.ActiveDocument.Words.count do
     Memo1.Lines.Add(W.ActiveDocument.Words.item(i).Text);
end;

end.
Текст этого приложения можно взять здесь (5,6 Кб).

    Очевидно, что данный способ подходит для работы с отдельными словами, но его можно использовать только для чтения, а не для записи. Когда документ открыт, прочитан, изменен, то, возможно, потребуется сохранить эти изменения.

    На следующем шаге мы рассмотрим сохранение документа.




Предыдущий шаг Содержание Следующий шаг