Формирование таблицы в шаблон 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;
|
Дело за малым определить номер вновь созданной таблицы и вставить данные, что то подсказывает мне что это надо делать в одном скрипте. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|