Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1303980851
stud92
2011-04-28 12:54
2011.08.07
отношение между таблицами бд


2-1304152965
armstrong
2011-04-30 12:42
2011.08.07
работа с графикой


15-1303122801
DiamondShark
2011-04-18 14:33
2011.08.07
Мобильные браузеры (WM)


2-1303716955
ANB
2011-04-25 11:35
2011.08.07
IdHTTPServer и HTTPS


15-1302985795
Юрий
2011-04-17 00:29
2011.08.07
С днем рождения ! 17 апреля 2011 воскресенье