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

Тема в разделе "Lotus - Программирование", создана пользователем KLif, 9 июл 2008.

Статус темы:
Закрыта.
  1. KLif

    KLif Гость

    Всем привет.

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    KLif
    пользуйтесь закладками
     
  3. KLif

    KLif Гость

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

    Код (Text):
    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 это делается так:

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

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Наверное, wdFieldFormCheckBox - это числовая константа. А ты строку передаешь.
     
  5. KLif

    KLif Гость

    Да так и есть, шас ищу числовые константы для этих значений ... пока туго :rolleyes:
     
  6. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Что-то типа:
    MsgBox(CStr(wdFieldFormCheckBox))
     
  7. KLif

    KLif Гость

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

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

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    KLif
    встречный вапрос. а зачем именно поля? может я чтото недопонимаю?
     
  9. KLif

    KLif Гость

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

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Вопрос очень интересный, у меня такая же проблема... можно ли у уже готовых полей менять имя? Просто если действовать копированием / вставлением, то у поля пустое имя =(
     
  11. KLif

    KLif Гость

    Менять то можно, только вот как добраться до нужного поля, если у него имя пустое ... можно по индексу ActiveDocument.FormFields(1).Name ... но опять же, как определить какой индекс нужен (если только запомнить расположение полей или идти по всем, пока не наткнешься на пустое)
     
  12. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    всё. думал над этим вапросом. почему как вариант на каждый документ из лотуса не создавать новый документ из ворда. ( может даже патом их обьеденить? )
     
  13. KLif

    KLif Гость

    Так и сделал, больше ничего в голову не пришло. Вот код, если кому-нибудь нужно:

    [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]
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей