| 
 
  
	| Формирование таблицы в шаблон Word через поле. 
 
 |  
	
		| Предыдущая тема :: Следующая тема |  
		| Автор | Сообщение |  
		| stocker Участник
 
 
 Вступление в Клуб: 14.11.2011
 
 | 
			
				|  Ср Июн 20, 2012 12:38   Формирование таблицы в шаблон Word через поле. |   |  
				| Полезность: Нет оценки 
 |  
				| Дано: шаблон Word в котором есть текстовое поле [POLE_1]. Надо нарисовать таблицу вместо этого поля, например таблицу:
 +------+------------+
 |№п/п |Значение  |
 +------+------------+
 |1       |100           |
 +------+------------+
 
 Заранее спасибо за помощь.
 |  |  
		|  |  
		| vtar Эксперт
 
 
 Вступление в Клуб: 20.03.2009
 
 |  |  
		|  |  
		| 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;
 
 | 
 Дело за малым определить номер вновь созданной таблицы и вставить данные, что то подсказывает мне что это надо делать в одном скрипте.
 |  |  
		|  |  
		|  |  
  
	| 
 
 | Вы не можете начинать темы Вы не можете отвечать на сообщения
 Вы не можете редактировать свои сообщения
 Вы не можете удалять свои сообщения
 Вы не можете голосовать в опросах
 
 |  |