Консультация № 142352
26.08.2008, 22:06
0.00 руб.
0 2 0
Добрый день!
Возник вопрос по генерации отчета в MS Word.

[b] Описание стенда и задачи: [/b]
Есть шаблон, который лежит в известной директори.
Через СOM подключаем Word (2003) и создаем страницу по шаблону.
В шаблоне есть набор дескрипторов вида %descriptor%.
Используя:
Call wordDoc.Content.Find.Execute ( "%descriptor%", True, False, False, False, False, True,, False, "TEST" )

меняем все дискрипторы в шаблоне на те значения, что мне нужны.
И вроде счастье близко, но есть проблема с дескрипторами, которые находятся в таблице следующего вида:
-----------------------------------
%descr1% | %descr2% | %descr3%|
-----------------------------------
Естественно, в таблицу будет записана не одна строчка значений, а матрица.

При этом, необходимо, чтобы заказчик мог в шаблоне вытащить дескриптор из таблицы и поставить его в любое место страницы.

[b] Как думал решить: [/b]
Найти в шаблоне дескриптор и выяснить, в таблице ли он.
Если да, то добавить строку таблицы, переместить дескриптор на строчку вниз, а в освободившуюся ячейку запихать значение.
Если нет, то просто заменить на строку данных из матрицы, перечислив значения через запятую

[b] Чего сделал: [/b]
Dim range As Variant
Set range = ActiveDocument.Content
range.Find.Execute "%DESC%", True
range.Select
Находит и выделяет. Но тут и возникает трабл - не знаю, каким образом определить, в таблице находиться объект range, или вне ее. Думал, поможет свойства Parent, но оно честно вернуло мне объект Document в обоих случаях. Проверял

MsgBox TypeName( range.Parent )

[b] Чего прошу: [/b] :)
Если кто знает, как реализовать задачу, просьба поделится ценным опытом.
Если есть уверенность, что это нереализуемо, также сообщите - чтобы я мог своему начальству это объяснить

С уважением, Rombs

Обсуждение

Неизвестный
27.08.2008, 07:58
общий
чтоб узнать "в таблице находиться объект range, или вне ее", можно попробовать анализировать наличие свойства Cells или лучше Tables.Count:


Код:
 
Dim range As Variant
Set range = ActiveDocument.Content
While range.Find.Execute("%DESC%", True)
If range.Tables.Count > 0 Then
'в таблице
Else
'не в таблице
End If
Wend

Неизвестный
27.08.2008, 12:35
общий
Ура! Спасибо большое. Работает.
Форма ответа