Экспорт Данных В Ms Word

Erlan

Member
09.04.2012
11
0
#1
Здравствуйте!
Написал на lotusScript код, который экспортирует данные из лотуса в ms word.
НО никак не могу справиться с этими ситуациями:
1) (Основная проблема) НЕ получается добавить вторую таблицу.
'создаю ворд документ на лету
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add()
objDoc.PageSetup.Orientation = wdOrientLandscape
Set objSelection = objWord.Selection
objSelection.Paragraphs(1).Format.Alignment = 1
objSelection.TypeText "TEST TEXT"
'добавил параграф
objSelection.Paragraphs.Add
Set objRange = objWord.ActiveDocument.Paragraphs(2).Range
'добавил таблицу 1
objDoc.Tables.Add objRange,1,9
With objDoc.Tables(1)
...здесь заполняю табличку
End With
'далее мне нужно отступить одну строку и вставить еще одну таблицу
'ВОТ ТУТ НАЧИНАЕТСЯ ПРОБЛЕМА
objSelection.Paragraphs.Add
Set objRange2 = objWord.ActiveDocument.Paragraphs.Last.Range
objDoc.Tables.Add objRange2,1,2
With objDoc.Tables(2)
...здесь заполняю табличку
End With

Код этот проверил, запихнув в макросы ворда. В ворде отработал как надо.
А вот в лотусе выдает ошибку. Пишет что нет таблицы с индексом 2 objDoc.Tables(2).

ПРОШУ помощи в составлении на лету документа ворд с двумя разными таблицами, одна под другой с отступом.



2) НЕ могу сделать страницу Альбомную ориентация страницы
objDoc.PageSetup.Orientation = wdOrientLandscape

Так же в ворде отрабатывает верно а в лотусе ориентация остается книжной
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#2
попробуйте использовать вот эти функции: Word Table Function
Там пример как раз для скрипта ну и еще полезностей, может будеть попроще.
Возможно дело в том, что объект objSelection при заполнении первой таблицы переписывается и его надо определять заново, но не факт просто предположение.
Так же все константы VBA лучше писать по значениям, ну и свериться с reference используемой версии word, может что поменялось.
 

Erlan

Member
09.04.2012
11
0
#3
Спасибо большое за ответ savl
решил проблему с таблицей так, (проблема была в объекте select). Если понадобится кому код оставляю пример тут

'получаю последний параграф и создаю объект Range для его выделения
Dim lastParagraph As Variant
Dim range As Variant
Dim table As Variant
Set lastParagraph = objDoc.Paragraphs(objDoc.Paragraphs.Count).Range
Set range = objDoc.Range(lastParagraph.Start, lastParagraph.End)
'выделяю последний абзац
range.select
'вставляю новый параграф
objSelection.Paragraphs.Add
'теперь уже создаю опять новый ранг и создаю там таблицу
Set lastParagraph = objDoc.Paragraphs(objDoc.Paragraphs.Count).Range
Set range = objDoc.Range(lastParagraph.Start, lastParagraph.End)
Call objDoc.Tables.Add(range, 1, 2)

Вот так заработало.
запутался совсем с объектом Select , и возможно можно сделать по другому , но оставлю так, потому как времени править нет. (Главное работает)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#4
ужоуж создать-то вордень - ну стыдно пользовать МСО ;)
POI вам в руки
сколько повторять - МСО VBA объекты очень запутаны...

Добавлено: для МСО современного розлива подойдет и http://www.docx4java.org/trac/docx4j
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#6
<Irony>
Если в лотусовой ветке есть вопрос по MS Office и OLE, то в его обсуждении есть ответ lmike про POI и Java
</Irony>
Без обид =)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#7
да какие обиды...
пытаюсь к разуму призвать..., я достаточно плотно работал с МСО макросами и прочей подобной херью. До сих пор плююсь, приходится, порой, ковырять "западные" формы, от их макроделов - ужос-ужос - индусы отдыхают
  • приходится коллегам писать макросы по всякую эксель-херь
  • есть вордовые шаблоны, кот. используются для генерации
столько затычек и всяких обходов угрёбищного МСО мне пришлось наделать (увы, в те времена, когда писал либу - POI был слаб, да др. либ не было), что вспоминаю с отвращением. Дык когда вижу - как молодёжь упорно лезет в эту каку, понятное желание - предотвратить