На этом шаге мы рассмотрим способы чтения из документа.
Рассмотрим чтение текста из открытого документа 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.
Если требуется экспортировать в программу-контроллер очень большой текст, то можно работать с его фрагментами в документе. Для этого используйте процедуру 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.
Очевидно, что данный способ подходит для работы с отдельными словами, но его можно использовать только для чтения, а не для записи. Когда документ открыт, прочитан, изменен, то, возможно, потребуется сохранить эти изменения.
На следующем шаге мы рассмотрим сохранение документа.