![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здраствуйте.
У меня возникла такая проблема: Нужно экспортировать данные из Stringgrid в заданную таблицу шаблона word. Код:
procedure TForm2.DocbtnClick(Sender: TObject); var W, T, N: Variant; iRows,Cols, i: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); // выбор талицы T:=W.ActiveDocument.Tables.Item(1); // обозначение номера строки в таблице 1 //Данные будут вноситься с 4 строки 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 // нумерация строчек T.Cell(iRows+3 ,1).Range.Text:= IntToStr(iRows ) + '.'; //ВОТ ДО ЭТОГО МОМЕНТА ВСЕ РАБОТАЕТ //ЭТОТ КОД ТОЖЕ РАБОЧИЙ ТОЛЬКО ДОБАВЛЯЕТСЯ 1 СТРОКА {T.Cell(4,2).Range.Text:= strngrd1.Cells[0,1]+#13+ strngrd1.Cells[1,1]+#13+ strngrd1.Cells[2,1]; T.Cell(4,3).Range.Text:= strngrd1.Cells[3,1]; T.Cell(4,4).Range.Text:= strngrd1.Cells[4,1]; T.Cell(4,5).Range.Text:= strngrd1.Cells[5,1]; T.Cell(4,6).Range.Text:= strngrd1.Cells[6,1]; T.Cell(4,7).Range.Text:= strngrd1.Cells[7,1]+','+#13+ strngrd1.Cells[8,1]+','+#13+ strngrd1.Cells[9,1]; T.Cell(4,8).Range.Text:= strngrd1.Cells[10,1]; T.Cell(4,9).Range.Text:= strngrd1.Cells[11,1]+#13+ strngrd1.Cells[12,1]; T.Cell(4,10).Range.Text:= strngrd1.Cells[13,1]; T.Cell(4,12).Range.Text:= strngrd1.Cells[14,1]; T.Cell(4,13).Range.Text:= strngrd1.Cells[15,1]; T.Cell(4,14).Range.Text:= strngrd1.Cells[16,1]; T.Cell(4,15).Range.Text:= strngrd1.Cells[17,1];} finally end; end; Вопрос в том как добавлять все строки из Stringgrid, ведь их количество определяется как strngrd1.RowCount. Все перерыл, ведь запускается цикл от 1 for iRows:=1 to strngrd1.RowCount-1 do например, делал вот так Код:
T.Cell(iRows+3,3).Range.Text:= strngrd1.Cells[3,iRows-1]; //Тут ошибка при компиляции выдает такое ссобщение [Warning] Elector.pas(367): FOR-Loop variable 'iRows' may be undefined after loop Наведите на правильную мыслю |
#2
|
|||
|
|||
![]() Что то я вопроса не пойму.
если после нумерации строк вы вставляете свой код: Код:
T.Cell(iRows+3,3).Range.Text:= strngrd1.Cells[3,iRows-1]; Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#3
|
|||
|
|||
![]() Спасибо огромное за совет.
Точно работает!!! |
#4
|
|||
|
|||
![]() Столкнулся еще с одной проблемой
На форме есть 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; Посоветуйте пожалуйста как быть в данной ситуации? Последний раз редактировалось Максон, 14.04.2011 в 13:54. Причина: нет заголовка |
#5
|
|||
|
|||
![]() Все дело в том что вы опять с циклами запутались
![]() Эту строчку Код:
if strngrd1.Cells[18, strngrd1.RowCount-1]='есть' then begin надо примерно тут: Код:
//запуск цикла по строкам и столбцам for iRows:=1 to strngrd1.RowCount-1 do //for Cols:=1 to strngrd1.ColCount-1 do begin // нумерация строчек if strngrd1.Cells[18, strngrd1.RowCount-1]='есть' then begin T.Cell(iRows+3 ,1).Range.Text:= IntToStr(iRows ) + '.'; Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#6
|
|||
|
|||
![]() Попробывал так сделать, но к сожалению он в таблице 1 добавляет пустые строки, а таблице 2 добавляет и строки и данные
|
#7
|
|||
|
|||
![]() if strngrd1.Cells[18, iRows-1]='есть' then
проверьте свой алгоритм. по идее вы должны проходя по строкам проверять есть или нет и если есть то тогда добавлять строку в таблицу 1 если нет то добавлять в таблицу 2 Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#8
|
|||
|
|||
![]() А как это сделать?
Помогите пожалуйста |
#9
|
|||
|
|||
![]() if strngrd1.Cells[18, iRows]='есть' then
Сделал таким образом. Получается чепуха какая-то ![]() А надо чтобы в таб.1 добавились 2 строчки и номера 1,2. В таб.2 добавились 2 строчки и номера 1,2. И не знаю как так сделать, подскажите пожалуйста |