Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Заполнеие шаблона через COM. Замена %дескрипторов% в таблице.

41K
26 августа 2008 года
Rombs
3 / / 26.08.2008
Добрый день!
Возник вопрос по генерации отчета в MS Word.

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

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

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

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

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

MsgBox TypeName( range.Parent )

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

С уважением, Rombs
14
27 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Возможно тебе поможет это:
[QUOTE=MSDN]
Range.TopLevelTables Property
Returns a Tables collection that represents the tables at the outermost nesting level in the current range.
[/QUOTE]
41K
27 августа 2008 года
Rombs
3 / / 26.08.2008
Или как вариант подсказали:

range.Tables.Count :)
14
28 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Я тоже об этом думал, да вот не уверен включает ли в себя Range ту таблицу внутри которой находится сам - а ворда нет, не проверить :)
Расскажи чего получилось
41K
31 августа 2008 года
Rombs
3 / / 26.08.2008
Получилось, что возвращает :) так что оба варианта работают
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог