из Stringgrid в разные таблицы Word
Столкнулся еще с одной проблемой
На форме есть Radiogroup пользователь вносит данные в edit-ы, выбирает из Radiogroup нужное событие "есть" или "нет" нажимает на кнопку и в Stringgrid вносится запись, далее после внесения всех данных, нажимает на кнопку "распечатать" и данные из Stringgrid экспортируются в шаблон таблицы word.
Теперь вопрос как сделать так чтобы данные из Stringgrid-а отображались в 2-х таблицах, те у кого есть событие "есть" отображались в таблице 1, а те у кого событие - "нет" в таблице 2.
Код:
procedure TForm2.DocbtnClick(Sender: TObject);
var
W, T, N: Variant;
iRows :Integer;
i:Integer;
// индекс строки
//x:string;
//s, r:Integer;
begin
W := CreateOleObject('Word.Application');
W.Visible:=True;
W.DisplayAlerts:=True;
try
W.Documents.Open(GetCurrentDir +'\mmm.dot',EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam);
// В К Л Ю Ч Е Н Н Ы Е В С П И С О К
//данные вносятся в ячейку Stringgrid, но в таблице не отображаются
if strngrd1.Cells[18, strngrd1.RowCount-1]='есть' then
begin //
// обозначение таблицы ее номера
T:=W.ActiveDocument.Tables.Item(1);
// обозначение номера строки в определенной таблице
N:=W.ActiveDocument.Tables.Item(1).Rows.Item(4);
// запуск цикла строк от 1 до последнего кол-ва в стринггриде
for i:=1 to strngrd1.RowCount-1 do
// добавление строк
T.Rows.Add(N);
// добавление строчек
//запуск цикла по строкам и столбцам
for iRows:=1 to strngrd1.RowCount-1 do
//for Cols:=1 to strngrd1.ColCount-1 do
begin
// нумерация строчек
T.Cell(iRows+3 ,1).Range.Text:= IntToStr(iRows ) + '.';
T.Cell(iRows+3,2).Range.Text:= strngrd1.Cells[0,iRows+0]+#13+ strngrd1.Cells[1,iRows+0]+#13+ strngrd1.Cells[2,iRows+0];
////////////
T.Cell(iRows+3,3).Range.Text:= strngrd1.Cells[3,iRows+0];
T.Cell(iRows+3,4).Range.Text:= strngrd1.Cells[4,iRows+0];
T.Cell(iRows+3,5).Range.Text:= strngrd1.Cells[5,iRows+0];
T.Cell(iRows+3,6).Range.Text:= strngrd1.Cells[6,iRows+0];
T.Cell(iRows+3,7).Range.Text:= strngrd1.Cells[7,iRows+0]+','+#13+ strngrd1.Cells[8,iRows+0]+','+#13+ strngrd1.Cells[9,iRows+0];
T.Cell(iRows+3,8).Range.Text:= strngrd1.Cells[10,iRows+0];
T.Cell(iRows+3,9).Range.Text:= strngrd1.Cells[11,iRows+0]+#13+ strngrd1.Cells[12,iRows+0];
T.Cell(iRows+3,10).Range.Text:= strngrd1.Cells[13,iRows+0];
T.Cell(iRows+3,12).Range.Text:= strngrd1.Cells[14,iRows+0];
T.Cell(iRows+3,13).Range.Text:= strngrd1.Cells[15,iRows+0];
T.Cell(iRows+3,14).Range.Text:= strngrd1.Cells[16,iRows+0];
T.Cell(iRows+3,15).Range.Text:= strngrd1.Cells[17,iRows+0];
end;
end;
// И С К Л Ю Ч Е Н И Е
if strngrd1.Cells[18, strngrd1.RowCount-1]='нет' then
begin //
// обозначение таблицы ее номера
T:=W.ActiveDocument.Tables.Item(2);
// обозначение номера строки в определенной таблице
N:=W.ActiveDocument.Tables.Item(2).Rows.Item(4);
// запуск цикла строк от 1 до последнего кол-ва в стринггриде
for i:=1 to strngrd1.RowCount-1 do
// добавление строк
T.Rows.Add(N);
// добавление строчек
//запуск цикла по строкам и столбцам
for iRows:=1 to strngrd1.RowCount-1 do
//for Cols:=1 to strngrd1.ColCount-1 do
begin
// нумерация строчек
T.Cell(iRows+3 ,1).Range.Text:= IntToStr(iRows ) + '.';
T.Cell(iRows+3,2).Range.Text:= strngrd1.Cells[0,iRows+0]+#13+ strngrd1.Cells[1,iRows+0]+#13+ strngrd1.Cells[2,iRows+0];
////////////
T.Cell(iRows+3,3).Range.Text:= strngrd1.Cells[3,iRows+0];
T.Cell(iRows+3,4).Range.Text:= strngrd1.Cells[4,iRows+0];
T.Cell(iRows+3,5).Range.Text:= strngrd1.Cells[5,iRows+0];
T.Cell(iRows+3,6).Range.Text:= strngrd1.Cells[6,iRows+0];
T.Cell(iRows+3,7).Range.Text:= strngrd1.Cells[7,iRows+0]+','+#13+ strngrd1.Cells[8,iRows+0]+','+#13+ strngrd1.Cells[9,iRows+0];
T.Cell(iRows+3,8).Range.Text:= strngrd1.Cells[10,iRows+0];
T.Cell(iRows+3,9).Range.Text:= strngrd1.Cells[11,iRows+0]+#13+ strngrd1.Cells[12,iRows+0];
T.Cell(iRows+3,10).Range.Text:= strngrd1.Cells[13,iRows+0];
T.Cell(iRows+3,12).Range.Text:= strngrd1.Cells[14,iRows+0];
T.Cell(iRows+3,13).Range.Text:= strngrd1.Cells[15,iRows+0];
T.Cell(iRows+3,14).Range.Text:= strngrd1.Cells[16,iRows+0];
T.Cell(iRows+3,15).Range.Text:= strngrd1.Cells[17,iRows+0];
end;
end;
finally
end;
end;
Код рабочий, единственное что не могу сообразить почему он добавляет в таблицу по последней записи, т.е. если последняя запись с событием "есть", то он все данные из Stringgrid перегоняет в первую таблицу и наоборот. Видимо все дело в strngrd1.RowCount-1?
Посоветуйте пожалуйста как быть в данной ситуации?
|