• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

KLif

Всем привет.

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

KLif

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

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

KLif

Что-то типа:
MsgBox(CStr(wdFieldFormCheckBox))

Сообщение пустое. Нашел в инете ( ) - там небольшой список констант. Мож кому пригодится.

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

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

morpheus

KLif
встречный вапрос. а зачем именно поля? может я чтото недопонимаю?
 
K

KLif

KLif
встречный вапрос. а зачем именно поля? может я чтото недопонимаю?

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

fedotxxl

Вопрос очень интересный, у меня такая же проблема... можно ли у уже готовых полей менять имя? Просто если действовать копированием / вставлением, то у поля пустое имя =(
 
K

KLif

Вопрос очень интересный, у меня такая же проблема... можно ли у уже готовых полей менять имя? Просто если действовать копированием / вставлением, то у поля пустое имя =(

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

morpheus

всё. думал над этим вапросом. почему как вариант на каждый документ из лотуса не создавать новый документ из ворда. ( может даже патом их обьеденить? )
 
K

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]
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!