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