Текущий архив: 2011.08.07;
Скачать: CL | DM;
Вниз
StringGrid и таблица Word Найти похожие ветки
← →
Максон © (2011-04-26 11:58) [40]Если будет стоять "есть", то все строки strngrd1.Cells[19, iRows] должны отображаться в таблице1, а если "нет" , то в таблице2.
← →
brother © (2011-04-26 12:03) [41]на заглавные буквы ты обратил внимание?
← →
Максон © (2011-04-26 12:05) [42]да тут не обязательно, они добавляются в Stringgrid из Combobox-а
← →
OW © (2011-04-26 12:19) [43]из кода:
по строкам грида
начать
Добавить строку в Т1 --это вот
Добавить строку в Т2 --и это вот
перенести в раздел, где
если 19 колонка строки = есть, то
начать
Добавить строку в Т1
...
если 19 колонка строки = нет, то
начать
Добавить строку в Т2
...
← →
Максон © (2011-04-26 12:37) [44]Строки добавляются.
А вот с нумерацией как быть почему-то для всех строчек выполняется один цикл T.Cell(iRows+3 ,1).Range.Text:= IntToStr(iRows) + ".";
← →
OW © (2011-04-26 12:43) [45]
> с нумерацией как быть
завести две переменные, куда писать колво строк в соотв. таблице.
если 19 колонка строки = есть, то
начать
Добавить строку в Т1
Увеличить переменную кол-ва строк T1 на 1
Записать в таблицу не общий счетчик, а ее
...
если 19 колонка строки = нет, то
начать
Добавить строку в Т2
аналогично с другой переменной
← →
Максон © (2011-04-26 14:38) [46]сделал следующим образом
procedure TForm2.DocbtnClick(Sender: TObject);
var
W, T,L,M, N: Variant;
iRows :Integer;
i, j: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);
// обозначение номера строки в определенной таблице
N:=W.ActiveDocument.Tables.Item(1).Rows.Item(4);
L:=W.ActiveDocument.Tables.Item(2);
// обозначение номера строки в определенной таблице
M:=W.ActiveDocument.Tables.Item(2).Rows.Item(4);
//запуск цикла по строкам
for iRows:=1 to strngrd1.RowCount-1 do
begin
if strngrd1.Cells[19, iRows]="есть" then
begin
T.Rows.Add(N);
//объявленная переменная счетчика таблицы1
for i:=1 to T.Rows.Count-1 do
begin
T.Cell(i+3 ,1).Range.Text:= IntToStr(i) + ".";
end;
end;
if strngrd1.Cells[19, iRows]="нет" then
begin
L.Rows.Add(M);
//переменная для таблицы2
for j:=1 to L.Rows.Count-1 do
begin
L.Cell(j+3 ,1).Range.Text:= IntToStr(j) + ".";
end;
end;
end;
finally
end;
end;
Проблема в том, что строки добавляются и нумеруются, вот только в последней строчке появляется цифра количества строк. Например, нумеруются строки 1,2,3,4, а в конце появляется 7.
В чем причина?
← →
OW © (2011-04-26 15:15) [47]думай
← →
Максон © (2011-04-26 17:36) [48]Тут два типа счетчика
1. iRows:=1 to strngrd1.RowCount-1
2. for i:=1 to T.Rows.Count-1
А как сделать, чтобы нумеровались строки 1,2,3,4, а в конце не появлялоась 7.
← →
Максон © (2011-04-27 07:07) [49]Немного разобрался получился код
procedure TForm2.DocbtnClick(Sender: TObject);
var
W, T,L,M, N: Variant;
iRows :Integer;
i, j: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);
// обозначение номера строки в определенной таблице
N:=W.ActiveDocument.Tables.Item(1).Rows.Item(4);
L:=W.ActiveDocument.Tables.Item(2);
// обозначение номера строки в определенной таблице
M:=W.ActiveDocument.Tables.Item(2).Rows.Item(4);
//объявление переменных для таблицы1 и таблицы2
i:=0;
j:=0;
//запуск цикла по строкам
for iRows:=1 to strngrd1.RowCount-1 do
begin
//если значение "есть" то делаем
if strngrd1.Cells[19, iRows]="есть" then
begin
i:=i+1;
T.Rows.Add(N);
T.Cell(i+3 ,1).Range.Text:= IntToStr(i) + ".";
end;
if strngrd1.Cells[19, iRows]="нет" then
begin
j:=j+1;
L.Rows.Add(M);
L.Cell(j+3 ,1).Range.Text:= IntToStr(j) + ".";
end;
end;
finally
end;
end;
Вроде бы работает, но все равно что-то не так
← →
OW © (2011-04-27 09:10) [50]
> Вроде бы работает, но все равно что-то не так
что не так?
все должно быть так .
← →
Максон © (2011-04-29 08:19) [51]Столкнулся еще с одной проблемой:
Колонки таблиц стали нессиметричными после заполнения. И пришлось все заново переделывать.
Таблица должна быть единой:(
таблица1
В 4-х первых строках записанны данные.
Добавление строк начинается с 5-ой строки из Stringgrid с событием "есть".
Потом после этих строк 1-а объединенная строка с названием и начиная со следующей должно происходить добавление строк из Stringgrid с событием "нет".
Шаблон таблицы выглядит следующим образом.
1,2,3,4 строки таблицы шаблона - фиксированная запись
5 - добавление строк с событием "есть"
6 - фиксированная запись
7- добавление строк с событием "нет"procedure TForm2.DocbtnClick(Sender: TObject);
var
W, T,M, N: Variant;
iRows :Integer;
i, j,q: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);
// обозначение номера строки в определенной таблице
N:=W.ActiveDocument.Tables.Item(1).Rows.Item(5);
i:=0;
j:=0;
q:=i+7;//переменная указывающая количество строк в таблице1 с 5 строки
// обозначение номера строки в определенной таблице }
M:=W.ActiveDocument.Tables.Item(1).Rows.Item(q);
//запуск цикла по строкам
for iRows:=1 to strngrd1.RowCount-1 do
begin
if strngrd1.Cells[19, iRows]="есть" then
begin
i:=i+1;
T.Rows.Add(N);
T.Cell(i+4 ,1).Range.Text:= IntToStr(i) + ".";
end;
//Здесь все работает, нумерация и добавление строк происходит нормально
if strngrd1.Cells[19, iRows]="нет" then
begin
j:=j+1;
T.Rows.Add(M);
T.Cell(j+q ,1).Range.Text:= IntToStr(j) + ".";
//а здесь проблема
end;
end;
finally
end;
end;
← →
OW © (2011-04-29 08:42) [52]
> q:=i+7;//переменная указывающая количество строк в таблице1
> с 5 строки
т.е. q = 7
> T.Cell(j+q ,1).Range.Text:= IntToStr(j) + ".";
и тут всегда q = 7, т.к. нигде не изменяется
проще всего разбить на 2 цикла
for iRows:=1 to strngrd1.RowCount-1 do
begin
if strngrd1.Cells[19, iRows]="есть" then
begin
i:=i+1;
T.Rows.Add(N);
T.Cell(i+4 ,1).Range.Text:= IntToStr(i) + ".";
end;
end;
for iRows:=1 to strngrd1.RowCount-1 do
begin
if strngrd1.Cells[19, iRows]="нет" then
begin
j:=j+1;
T.Rows.Add(M);
// теперь i - колво записей первой таблицы
// поэтому можно использовать для адресации
T.Cell(j + i + (ЕЩЕ_КАКАЯ_КОНСТАНТА_число_фиксированных_строк),1).Range.Text:= IntToStr(j) + ".";
end;
end;
если правильно понял
Страницы: 1 2 вся ветка
Текущий архив: 2011.08.07;
Скачать: CL | DM;
Память: 0.58 MB
Время: 0.008 c