Программное создание полей в Word

  • Автор темы KLif
  • Дата начала
Статус
Закрыто для дальнейших ответов.
K

KLif

#1
Всем привет.

Вообщем задался вопросом, можно ли программно из лотус создать поле в документе ворд? Обычно при экспорте в ворд, уже существует заготовленный шаблон с набором полей, а тут ситуация, что мы заранее не знаем какие точно будут поля. Кто-нибудь знает возможно это, если да, то подскажите как.
 
K

KLif

#3
KLif
пользуйтесь закладками
Не совсем понятно как использовать закладки, не уловил мысль ... Полазил в ворде и хелпах VBA в итоге пришел к этому, пробема в том что приходится на угад тыкать ... сейчас ошибка на последней строчке: неверно указаны параметры

Код:
Set word = CreateObject("Word.Application")
Call word.documents.add("C:\Temp\Test.doc")
Set worddoc = word.activedocument 
Set field = worddoc.FormFields.Add(worddoc.Range(0,0), "wdFieldFormTextInput")
В VBA это делается так:

Код:
Set ffield = ActiveDocument.FormFields.Add( _
Range:=ActiveDocument.Range(Start:=0,End:=0), _
Type:=wdFieldFormCheckBox)
Мож кто нибудь что подскажет?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#4
Наверное, wdFieldFormCheckBox - это числовая константа. А ты строку передаешь.
 
K

KLif

#7
Что-то типа:
MsgBox(CStr(wdFieldFormCheckBox))
Сообщение пустое. Нашел в инете ( http://www.infosib.com.ru/about/tech/ProtWord.html ) - там небольшой список констант. Мож кому пригодится.

Вот так создается текстовое поле.

Код:
Set field = worddoc.FormFields.Add(worddoc.Range(0,0), 70)
field.Name = "FieldName" - имя
field.Result = "Hello word" - значение
 

morpheus

скриптописец
07.08.2006
3 915
1
#8
KLif
встречный вапрос. а зачем именно поля? может я чтото недопонимаю?
 
K

KLif

#9
KLif
встречный вапрос. а зачем именно поля? может я чтото недопонимаю?
У нас есть коллекция из н-документов, есть один шаблон, нужно в один документ ворда скинуть все эти доки по одному шаблону (на каждной странице 1 документ). Проблема в том что наввание полей будет одинаково и непонятно что куда вставлять ... хотя я не уверен что выбрал правильное решение для этого ... но и не понял мысли с закладками (может я не понимаю как сами закладки работают :rolleyes:)
 

fedotxxl

Well-known member
09.11.2005
614
0
#10
Вопрос очень интересный, у меня такая же проблема... можно ли у уже готовых полей менять имя? Просто если действовать копированием / вставлением, то у поля пустое имя =(
 
K
#11
Вопрос очень интересный, у меня такая же проблема... можно ли у уже готовых полей менять имя? Просто если действовать копированием / вставлением, то у поля пустое имя =(
Менять то можно, только вот как добраться до нужного поля, если у него имя пустое ... можно по индексу ActiveDocument.FormFields(1).Name ... но опять же, как определить какой индекс нужен (если только запомнить расположение полей или идти по всем, пока не наткнешься на пустое)
 

morpheus

скриптописец
07.08.2006
3 915
1
#12
всё. думал над этим вапросом. почему как вариант на каждый документ из лотуса не создавать новый документ из ворда. ( может даже патом их обьеденить? )
 
K
#13
всё. думал над этим вапросом. почему как вариант на каждый документ из лотуса не создавать новый документ из ворда. ( может даже патом их обьеденить? )
Так и сделал, больше ничего в голову не пришло. Вот код, если кому-нибудь нужно:

[codebox] Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim ec As NotesViewEntryCollection
Dim e As NotesViewEntry
Dim doc As NotesDocument
Dim i As Integer
Dim j As Integer
j = 0
Set word = CreateObject("Word.Application")
Call word.documents.add()
Set maindoc = word.activedocument

Set db = session.CurrentDatabase
Set view = db.GetView("Person")
Set ec = view.AllEntries
Set e = ec.GetFirstEntry

While Not e Is Nothing
Set doc = e.Document

Call word.documents.add("C:\Temp\shablon.doc")
Set worddoc = word.activedocument
worddoc.FormFields("FirstName").Result = doc.GetItemValue("FirstName")(0)
worddoc.FormFields("LastName").Result = doc.GetItemValue("LastName")(0)
worddoc.FormFields("MiddleName").Result = doc.GetItemValue("MiddleName")(0)
worddoc.saveas("C:\Temp\test"+Str(j)+".doc")

Call maindoc.Range(0,0).InsertBreak(7)
Call maindoc.Range(0,0).InsertFile("C:\Temp\test"+Str(j)+".doc")

Call worddoc.Close()
Kill "C:\Temp\test"+Str(j)+".doc"

j = j + 1
Set e = ec.GetNextEntry(e)
Wend

maindoc.saveas("C:\Temp\"+Today+".doc")
word.visible = True
word.quit[/codebox]
 
Статус
Закрыто для дальнейших ответов.