Шаг 95.
Автоматизация Microsoft Word. Работа с объектом WordBasic. Создание и редактирование таблиц в документе Word

    На этом шаге мы рассмотрим создание и редактирование таблиц средствами WordBasic.

    Таблицы в документах Word представляют собой объекты, являющиеся продолжением основного текста в документе. Например, если мы создаем таблицу, то она создается в месте нахождения курсора и, таким образом, разрывает текст. То есть если требуется создать таблицу в определенном месте документа, то необходимо предварительно установить в это место курсор.

    Создадим таблицу в нашем документе, для этого используем функцию TableInsertTable(NumColumns, NumRows), где NumColumns и NumRows - количества столбцов и строк в создаваемой таблице. Есть и другие синтаксисы данной функции (см. справку по WordBasic).


Рис.1. Фрагмент справки по WordBasic, посвященный созданию таблиц

    Рассмотрим, как выглядит в Delphi фрагмент программы, создающей таблицу.

procedure TForm1.Button3Click(Sender: TObject);
//Вставка таблицы в документ
var
  NumColumns, NumRows: Integer;
begin
  //  Создаем таблицу размером 2x5
  NumColumns:=2;
  NumRows:=5;
  TB:=WB.TableInsertTable(NumColumns,NumRows);
  //  Отображаем линии таблицы
  WB.TableGridlines(true);
  //  Переходим в  конец документа
  WB.EndOfDocument;
  //  Вставляем пробел
  WB.insert(' ');
  // Переходим в конец документа
  WB.EndOfDocument;
end;

    Данная процедура включает в себя несколько операторов. Первые два пропускаем. Следующий оператор создает таблицу. Следующий за ним оператор представляет собой вызов процедуры, устанавливающей свойства линий таблицы. Если единственный аргумент процедуры TableGridlines установлен в значение True, то линии границ таблицы отображаются. Чтобы скрыть линии границ, вызовем метод WB.TableGridlines(False). Далее переходим в конец документа и вставляем символ пробела, чтобы следующая вставляемая таблица не слилась с этой таблицей.

    Если между существующей таблицей и вновь создаваемой, следующей за первой, нет ни одного символа, то вторая таблица просто сольется с первой. В этом случае создание новой таблицы будет иметь эффект добавления новых строк к существующей таблице. Добавить или вставить новую строку в таблицу можно другим способом - с помощью процедуры TableInsertRow. Если вызвать эту процедуру без аргумента, то будет вставлена одна строка; если при вызове в качестве аргумента задать целое число, то оно определит количество вставляемых строк. Эта процедура выполняется, если курсор находится в области таблицы, иначе генерируется ошибка.

    Рассмотрим следующую процедуру.

procedure TForm1.Button8Click(Sender: TObject);
//Добавление строки в таблицу
begin
  WB.TableInsertRow; // Добавляем одну строку
  WB.TableInsertRow(3); // Добавляем три строки
end;

    В результате выполнения этой и предыдущей процедур получаем две таблицы с заданными параметрами.


Рис.2. Добавление таблиц в документ и вставка строк в последнюю таблицу

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

    Используем для этого процедуры NextCell и PrevCell, позволяющие двигаться последовательно от первой ячейки к последней или наоборот. Дополнительно к перемещению курсора от первой к последней ячейке процедура NextCell добавляет новую строку в конец таблицы, если до этого курсор находился в последней ячейке таблицы.

    Рассмотрим применение этих процедур в Delphi на следующем примере программного кода.

procedure TForm1.Button4Click(Sender: TObject);
//Перемещение курсора к следующей ячейке
begin
  WB.NextCell;
end;

procedure TForm1.Button5Click(Sender: TObject);
//Перемещение курсора к предыдущей ячейке
begin
  WB.PrevCell;
end;

    Организовать перемещение курсора в таблице можно и с помощью другой пары процедур - NextObject и PrevObject. В отличие от уже рассмотренных процедур, они позволяют перемещаться и между таблицами, не изменяя при этом саму структуру таблицы. Пример их использования в приложениях Delphi:

procedure TForm1.Button6Click(Sender: TObject);
//Перемещение к следующему объекту
begin
  WB.NextObject;
end;

procedure TForm1.Button7Click(Sender: TObject);
//Перемещение к предыдущему объекту
begin
  WB.PrevObject;
end;

    Для перемещения непосредственно в конец или начало строки или столбца (и в начало или конец таблицы) применяют следующие четыре команды WordBasic:

    Комбинируя представленные процедуры, можно перемещаться в начало или конец таблицы, а также перемещаться между таблицами в документе.

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

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  WB: Variant;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
//Создание объекта WordBasic
begin
 WB:=CreateOleObject('Word.Basic');
end;

procedure TForm1.Button2Click(Sender: TObject);
//Показать окно Word
begin
 WB.AppShow;
 WB.FileNewDefault;
end;

procedure TForm1.Button3Click(Sender: TObject);
//Вставка таблицы в документ
var
  NumColumns, NumRows: Integer;
begin
  //  Создаем таблицу размером 2x5
  NumColumns:=2;
  NumRows:=5;
  TB:=WB.TableInsertTable(NumColumns,NumRows);
  //  Отображаем линии таблицы
  WB.TableGridlines(true);
  //  Переходим в  конец документа
  WB.EndOfDocument;
  //  Вставляем пробел
  WB.insert(' ');
  // Переходим в конец документа
  WB.EndOfDocument;
end;

procedure TForm1.Button4Click(Sender: TObject);
//Перемещение курсора к следующей ячейке
begin
  WB.NextCell;
end;

procedure TForm1.Button5Click(Sender: TObject);
//Перемещение курсора к предыдущей ячейке
begin
  WB.PrevCell;
end;

procedure TForm1.Button6Click(Sender: TObject);
//Перемещение к следующему объекту
begin
  WB.NextObject;
end;

procedure TForm1.Button7Click(Sender: TObject);
//Перемещение к предыдущему объекту
begin
  WB.PrevObject;
end;

procedure TForm1.Button8Click(Sender: TObject);
//Добавление строки в таблицу
begin
  WB.TableInsertRow; // Добавляем одну строку
  WB.TableInsertRow(3); // Добавляем три строки
end;

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

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

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




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