На этом шаге мы рассмотрим способы добавления и удаления строк и столбцов.
Рассмотрев обшие свойства столбцов, строк и ячеек, перейдем к некоторым методам коллекции Rows и Columns.
Создавая таблицу, мы не можем быть уверенными в том, что нас устроит количество строк и столбцов, определенное при ее создании. Для увеличения таблицы предназначен метод Add коллекции Rows и Columns, а для удаления элементов этих коллекций - метод Delete. Первый метод добавляет строку или столбец в конец таблицы, а второй удаляет строку или столбец с указанным индексом.
Создадим новую форму и расположим в ней элементы управления. Создадим 4 кнопки, которые будут добавлять строки и столбцы, а также удалять заданные строки и столбцы.
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; ListBox1: TListBox; Button4: TButton; Button5: TButton; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Label3: TLabel; Edit2: TEdit; Label4: TLabel; Edit3: TEdit; Label5: TLabel; Edit4: TEdit; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W:Variant; table: Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание таблицы begin W.ActiveDocument.Tables.Add(Range:=W.ActiveDocument.Range, NumRows:=2, NumColumns:=3); end; procedure TForm1.Button2Click(Sender: TObject); begin W:=CreateOleObject('Word.Application'); W.Visible:=True; W.Documents.Add; end; procedure TForm1.Button3Click(Sender: TObject); //Таблица в конце документа var MyRange:Variant; begin W.ActiveDocument.Range.InsertAfter(' '); MyRange:=W.ActiveDocument.Range(W.ActiveDocument.Range.End-1, W.ActiveDocument.Range.End-1); W.ActiveDocument.Tables.Add(Range:=MyRange, NumRows:=2, NumColumns:=3); end; procedure TForm1.Button4Click(Sender: TObject); //Количество таблиц var a: integer; begin ListBox1.Items.Clear; for a:=1 to W.ActiveDocument.Tables.Count do begin ListBox1.Items.Add('Таблица - '+IntToStr(a)); end; end; procedure TForm1.Button5Click(Sender: TObject); //Удаление выбранной таблицы begin W.ActiveDocument.Tables.Item(ListBox1.ItemIndex+1).Select; W.ActiveDocument.Tables.Item(ListBox1.ItemIndex+1).Delete; end; procedure TForm1.ListBox1Click(Sender: TObject); //Запомнить параметры выбранной таблицы begin table:=W.ActiveDocument.Tables.Item(ListBox1.ItemIndex+1); Edit1.Text:=IntToStr(table.Columns.Count); Edit2.Text:=IntToStr(table.Columns.Width); end; procedure TForm1.Button6Click(Sender: TObject); begin Close; end; procedure TForm1.Button8Click(Sender: TObject); //Процедура добавления строки begin table.Rows.Add; end; procedure TForm1.Button7Click(Sender: TObject); //Процедура добавления столбца begin table.Columns.Add; end; procedure TForm1.Button9Click(Sender: TObject); //Процедура удаления заданной строки begin table.Rows.Item(StrToInt(Edit4.Text)).Delete; end; procedure TForm1.Button10Click(Sender: TObject); //Процедура удаления заданного столбца begin table.Columns.Item(StrToInt(Edit3.Text)).Delete; end; end.
Результат работы приложения можно увидеть на рисунке 1:
Рис.1. Результат работы приложения
Поскольку строки и столбцы добавляются в конец таблицы, они имеют такой же стиль, как и те, к которым они добавлены.
Для того чтобы добавить строку или столбец в произвольное место таблицы, нужно вызывать метод Add с аргументом, которым является ссылка на строку (столбец), перед которой требуется вставить новую строку (столбец). Изменим предыдущий пример, добавив кнопку, вставляющуюя новую строку. Номер строки, после которой вставляется новая строка, задается в соответствующем поле.
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; ListBox1: TListBox; Button4: TButton; Button5: TButton; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Label3: TLabel; Edit2: TEdit; Label4: TLabel; Edit3: TEdit; Label5: TLabel; Edit4: TEdit; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Label6: TLabel; Edit5: TEdit; Button11: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var W:Variant; table: Variant; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Создание таблицы begin W.ActiveDocument.Tables.Add(Range:=W.ActiveDocument.Range, NumRows:=2, NumColumns:=3); end; procedure TForm1.Button2Click(Sender: TObject); begin W:=CreateOleObject('Word.Application'); W.Visible:=True; W.Documents.Add; end; procedure TForm1.Button3Click(Sender: TObject); //Таблица в конце документа var MyRange:Variant; begin W.ActiveDocument.Range.InsertAfter(' '); MyRange:=W.ActiveDocument.Range(W.ActiveDocument.Range.End-1, W.ActiveDocument.Range.End-1); W.ActiveDocument.Tables.Add(Range:=MyRange, NumRows:=2, NumColumns:=3); end; procedure TForm1.Button4Click(Sender: TObject); //Количество таблиц var a: integer; begin ListBox1.Items.Clear; for a:=1 to W.ActiveDocument.Tables.Count do begin ListBox1.Items.Add('Таблица - '+IntToStr(a)); end; end; procedure TForm1.Button5Click(Sender: TObject); //Удаление выбранной таблицы begin W.ActiveDocument.Tables.Item(ListBox1.ItemIndex+1).Select; W.ActiveDocument.Tables.Item(ListBox1.ItemIndex+1).Delete; end; procedure TForm1.ListBox1Click(Sender: TObject); //Запомнить параметры выбранной таблицы begin table:=W.ActiveDocument.Tables.Item(ListBox1.ItemIndex+1); Edit1.Text:=IntToStr(table.Columns.Count); Edit2.Text:=IntToStr(table.Columns.Width); end; procedure TForm1.Button6Click(Sender: TObject); begin Close; end; procedure TForm1.Button8Click(Sender: TObject); //Процедура добавления строки begin table.Rows.Add; end; procedure TForm1.Button7Click(Sender: TObject); //Процедура добавления столбца begin table.Columns.Add; end; procedure TForm1.Button9Click(Sender: TObject); //Процедура удаления заданной строки begin table.Rows.Item(StrToInt(Edit4.Text)).Delete; end; procedure TForm1.Button10Click(Sender: TObject); //Процедура удаления заданного столбца begin table.Columns.Item(StrToInt(Edit3.Text)).Delete; end; procedure TForm1.Button11Click(Sender: TObject); //Вставка строки в заданное место var row:Variant; begin row:=table.Rows.Item(StrToInt(Edit5.Text)+1); table.Rows.Add(row); end; end.
Результат работы приложения можно увидеть на рисунке 2:
Рис.2. Результат работы приложения
На следующем шаге мы рассмотрим размещение текста в ячейках таблицы.