CftClub.ru
Клуб специалистов ЦФТ-Банк

Формирование таблицы в шаблон Word через поле.

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Настройка и сопровождение
Предыдущая тема :: Следующая тема  
Автор Сообщение
stocker
Участник


Вступление в Клуб: 14.11.2011
СообщениеСр Июн 20, 2012 12:38   Формирование таблицы в шаблон Word через поле. Ответить с цитатой
Полезность: Нет оценки
Дано: шаблон Word в котором есть текстовое поле [POLE_1].
Надо нарисовать таблицу вместо этого поля, например таблицу:
+------+------------+
|№п/п |Значение |
+------+------------+
|1 |100 |
+------+------------+

Заранее спасибо за помощь.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Июн 20, 2012 13:39    Ответить с цитатой
Полезность: Нет оценки
http://www.cftclub.ru/viewtopic.php?t=1019&highlight=%F2%E0%E1%EB%E8%F6%E0+word
stocker
Участник


Вступление в Клуб: 14.11.2011
СообщениеЧт Июн 21, 2012 04:17    Ответить с цитатой
Полезность: Нет оценки
Это не совсем то, что мне надо, в конкретном примере в шаблоне уже есть таблица, т.е. у неё определен индекс и тогда уже с ней можно работать. В моем случае дано только текстовое поле мне его необходимо заменить таблицей.
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеЧт Июн 21, 2012 08:51    Ответить с цитатой
Полезность: Нет оценки
stocker пишет:
Это не совсем то, что мне надо, в конкретном примере в шаблоне уже есть таблица, т.е. у неё определен индекс и тогда уже с ней можно работать. В моем случае дано только текстовое поле мне его необходимо заменить таблицей.

В таком случае поле надо заполнять результатом запроса.
Пример:

Клиент скрипт:
Код:

' #include ::[BANK_CLIENT].[LIB_VB_DOC]
sub Standard_Table(T, pinfo, start_row, cols)
   data = GetData(pinfo)  'Строка значений ячеек таблицы в виде
   'Кол-во строк~последовательные значения ячеек
   cells = split(data, "~")
   if instr(data,"~")=0 and data<>"0" then
      msgbox("Не сформированы данные для таблицы "&pinfo)
      exit sub
   end if
   rows  = cells(0)
   for row=2 to rows
      T.Rows.Add
   next
   
   for row = 0 to rows-1
      for col = 1 to cols
         value = cells(row*cols+col)
         T.Cell(row+start_row, col+1).Range.Text = value
      next
   next
end sub

public function Main(LastControl)
   if LastControl is Nothing then
      for i = 1 to V_CNT.Value
         if not OpenWordDoc(WrdApp, WrdDoc, GetData("REPORTFILE_")) then
            exit function
         end if
         
         for each p in WrdDoc.CustomDocumentProperties
            TextData = " "
            p.Value = GetData(p.Name)
         next
         WrdDoc.Fields.Update
   
         Set T = WrdDoc.Tables(1)
         
         Call Standard_Table(T,"ПС",68,29)
         
         call SetWordVisible(WrdApp, WrdDoc) 'показываем документ      
         if i < V_CNT.Value then
            Call Form1.ScriptServerValidate(V_IDX,"V_IDX")
         end if
      next
   end if   
   Main = true
end function


Секция проверка:
Код:
...
if p_info = 'ПС' then

         cnt := 0;
         V_DATA := '';
         for i in this.RA_PS_ARR
         where i.[RA_PS] is not null or i.[RA_VO] is not null
         loop
            V_DATA := V_DATA||'~'||'ПС №';
            o := length(i.RA_PS);
            if i.[RA_PS] is not null then
               if o<>18 then
                  Pragma error('Некорректный номер ПС в массиве!');
               end if;
               For k in 1..o
               loop
                  V_DATA := V_DATA||'~'||substr(i.[RA_PS],k,1);
                  if k in (8,12,16,17) then
                     V_DATA := V_DATA||'~'||'/';
                  end if;
               End Loop;
            else
               V_DATA := V_DATA||'~ ~ ~ ~ ~ ~ ~ ~ ~/~ ~ ~ ~ ~/~ ~ ~ ~ ~/~ ~/~ ';
            end if;
            V_DATA := V_DATA||'~'||'Код вида валютной операции';
            vo := i.[RA_VO_STR];
            --debug_pipe('vo = '||vo, 0);
            IF length(vo) = 5 then
               for v in 1..5
               Loop
                  V_DATA := V_DATA||'~'||substr(vo,v,1);
               End Loop;
            else
               V_DATA := V_DATA||'~ ~ ~ ~ ~ ';
            end if;
            cnt := cnt+1;
         end loop;
         V_DATA := cnt||V_DATA;
...

_________________
всегда есть как минимум 2 выхода
stocker
Участник


Вступление в Клуб: 14.11.2011
СообщениеПт Июн 22, 2012 13:04    Ответить с цитатой
Полезность: 1
Что то, я в этих исходниках не увидел создание таблицы. Сам накопал создание простой таблицы с помощью клиент-скрипта, без внутреннего форматирования
Код:

'#include ::[RUNTIME].[MSWORD_SCRIPT]
Public Function Main(LastControl)
   If LastControl Is Nothing Then
   Elseif LastControl is OK then
   if not OpenWordDoc(WrdApp, WrdDoc, GetDat("REPORTFILE")) then
   MsgBox "Can not open file!"
   Main = False
   Exit Function
   end if
      
   Call SetBracketsFields( WrdApp, WrdDoc, "numdog" )       dim FieldsColl
   set FieldsColl = WrdApp.ActiveDocument.FormFields
   if FieldsColl.Count >= 1 then
      for Each aField in FieldsColl
         Text4Setting = GetData(aField.Name)
         if Text4Setting = "" then
            Text4Setting = " "
         end if
         if instr(1, Text4Setting, "EXEC") > 0 then
            aField.Range.Select
            Text4Setting = mid(Text4Setting, 5)
            Execute Text4Setting
            Text4Setting = " "
         else
            if Len(Text4Setting) > 255 _
            or instr(1, Text4Setting, vbLF,vbBinaryCompare) > 0 _
            then
               WrdDoc.FormFields(aField.Name).Select
               Call WrdApp.Selection.TypeText(Text4Setting)
            else
               aField.Result = Text4Setting
            end if
         end if
      next
   end If
   call SetWordVisible(WrdApp, WrdDoc)' показать документ
   End If
   
   Main = True ' Результирующее значение валидатора (True или False)   
End Function

И тест обработчика:
Код:

   if P_CODE_INFO = 'TABLE_TEST' then
      return 'EXEC WrdDoc.Tables.Add WrdApp.Selection.Range, 3, 4, 1, 0';   
   end if;

Дело за малым определить номер вновь созданной таблицы и вставить данные, что то подсказывает мне что это надо делать в одном скрипте.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Настройка и сопровождение Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru