Attachments, Очень нужна помощь!

  • Автор темы OlyaZ
  • Дата начала
O

OlyaZ

Ой, все заработало!!!
супер!!!
Огромное спасибо, Akupaka!!!
OKEN, тебе тоже не меньшее спасибо за помощь и желание помочь!!!
ВЫ СУПЕР!!!

у меня тока вот еще вопросик будет....Пардон, канешн, за наглость, если таковой сочтете...

В общем мне бы еще код для кнопочек на формах, чтоб можно было создать аналогичные документам на основе шаблонов документы Word и Excel. у них формы почти такие же как у документа на основе шаблона, тока вместо той кнопки для копирования вложений должен создаться документ Word или excel с именем, заданным в поле выше (например, в поле "word_name" или "excel_name").

Мож завалялся код где-нить,а? На форуме видела что-то подобное, но вот под себя сделать не получилось....
 
A

Akupaka

что имеется в виду?
у тебя есть документ с вложением шаблоном (.dot/.xlt), и ты хочешь по нажатию на какую-то кнопку создать в другом документе вложение (doc/xls), созданное на основании того шаблона?..

думаю, что тут придется шаманить с ActiveX офиса...
- из указанного документа с шаблоном выгрузить вложение на диск;
- запустить офис (возможно без УИ);
- создать файл-документ на основании шаблона;
- прикрепить созданный файл к текущему доку.
 
O

OlyaZ

что имеется в виду?

подразумевается, что можно создать пустой док Word или Excel. для каждого из них разные формы: там заполняется этап проекта, берется название выбранного проекта, пишется в поле название документа, а по кнопке "Создать" на форме создается док Word или лист Excel с названием, введенным в поле "название документа"
 
A

Akupaka

я так и не понял, что именно нужно получить от ворда :)
нужно по нажатию на какую-то кнопку открыть ворд с новым вордовским документом, который будет иметь конкретное имя файла?..
или нужно открыть ворд и вписать в документ какие-то данные из документа в лотусе?..
 
O

OlyaZ

я так и не понял, что именно нужно получить от ворда :)
нужно по нажатию на какую-то кнопку открыть ворд с новым вордовским документом, который будет иметь конкретное имя файла?..
или нужно открыть ворд и вписать в документ какие-то данные из документа в лотусе?..

Первый вариант!!! нужно, чтоб создавался новый вордовский док с конкретным именем файла. а дальше пользователь уже будет сам изменять файл как ему хочется, главное, чтоб все потом сохранялось :)
 
A

Akupaka

уф... я с офисом давно не работал...
вот тебе пример кода как создать объект редактора и открыть,
еще можно сохранить с конкретным именем...
а как ему имя файла задать до сохранения уже поищи в нете...

Код:
'Создание Word-документа
Set word = CreateObject("Word.Application") 'Создание объекта Word'a
Call word.documents.add("") 'Создание нового документа по шаблону
Set worddoc = word.activedocument 'Активация объекта

...

worddoc.saveas(customername) 'сохранение документа-Word'a с именем файла в переменной customername
word.visible = True 'Сделать видимым окно Word'a
 
A

abbatik

Кажется формат примерно такой: SaveAs NewFileName, "", "MS Word 97", False, True, False
 
H

hosm

Код:
'Создание документа Word/Excel
Sub Click(Source As Button)
Dim PartExtension As String
Dim AppName As String
Dim offApp As Variant
Dim offDoc As Variant
Dim AppType As Integer
Dim DocName As String

Const PartExtensionW = ".doc"					' WORD`ового файла
Const AppNameW = "Word.Application"
Const PartExtensionX = ".xls"					'  Excel`евого файла
Const AppNameX = "Excel.Application"

Const PartName = "doc001" ' имя файла
' просто и тупо, сделай, как тебе надо :)
If Msgbox("Создать документ Word (Yes) / Excel (No)?", 4+32, "Создать") = 6 Then 
AppType = 1
Else
AppType = 2
End If

Select Case AppType
Case 1
DocName = PartName & PartExtensionW
AppName = AppNameW
Case 2
DocName = PartName & PartExtensionX
AppName = AppNameX
End Select

' open Word/Excel
Err = 0 
On Error Resume Next
Set offApp = GetObject ("", AppName)
If Err Then
Set offApp = CreateObject (AppName)
End If
On Error Goto 0
If offApp Is Nothing Then
Print "Не установлено приложение " & Strleft(AppName, ".")
Exit Sub
End If
Let offApp.Visible = True ' делаем видимым

Select Case AppType ' тут чуть отличается
Case 1	
Set offDoc = offApp.Documents.Add("", False, 0, True) ' открываем пустой
offDoc.activate '
Case 2
Set offdoc = offApp.Workbooks.Add
End Select
Call offDoc.SaveAs(DocName) ' сохраняем
End Sub
 
O

OlyaZ

вот тебе пример кода как создать объект редактора и открыть,
еще можно сохранить с конкретным именем...
а как ему имя файла задать до сохранения уже поищи в нете...
пасибки. скажи, а это многоточие что значит? :blink:
глянь плз эту тему - https://codeby.net/threads/30315.html?hl=word
это мне подойдет для названия файла?

а с Excel тоже самое почти будет или есть какие-то особенности?
 
A

Akupaka

троеточие? это троеточие :blink: можешь вместо троеточия свой код вписать ;)
по поводу офиса, придется тебе самостоятельно попробовать, я не очень-то в нем разбираюсь... в той теме достаточно для теста инфы + наши предыдущие посты показывают как создать объект приложения...
 
H

hosm

глянь плз эту тему - ]]>https://codeby.net/threads/30315.html?hl=word]]>
это мне подойдет для названия файла?

а с Excel тоже самое почти будет или есть какие-то особенности?
Убрала в своем коде сохранение по SaveAs. Код по ссылке только меняет заголовок окна.
Для экселя вариант приведен. Есть немного особенностей.
 
O

OlyaZ

OKEN, воспользовалась твоим кодом для создания документов Word/ Excel. тока вот после сохранения в ворде/ экселе этот файл не аттачится на форму. а для него там и поле заведено давно :blink:
Или этот код не подразумевает, что все должно на форму вкладываться?



Убрала в своем коде сохранение по SaveAs.

это откуда убрано? предпоследняя строка что ли?
 
H

hosm

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

Цитата(OKEN @ 28:05:2009, 17:54 )
Убрала в своем коде сохранение по SaveAs.


это откуда убрано? предпоследняя строка что ли?
Это я проверяла, насколько влияет на имя файла при сохранении установки заголовка окна, которые приведены в ссылке. Как и предполагалось, никак :( Т.е. SaveAs нужен для сохранения документа под нужным именем...
 
O

OlyaZ

Не, подразумевается, что по кнопке создается пустой файл, но после его редактирования пользователем, он сохраняется как вложение на форме
 
H

hosm

я тут подумала - если вложение отображается в рт-поле, то может не надо его кодом открывать в ворде на редактирование пользователю, т.к. тогда непонятно, как лотус узнает, что пользователь закончил редактирование шаблона в ворде (нужна тогда кнопочка для добавления документа ворд в документ лотус как вложения, которую пользователь нажмет после завершения редактирования).
Может, просто создать, сохранить на диске и сразу прикрепить с диска пустое вложение. А пользователь потом сможет воспользоваться стандартным меню лотуса для редактирования аттача?
Но я встречала код, где аттач скрывался и все действия с аттачем производились с помощью кода: были отдельные кнопки для создания документа ворд, открытия на редактирование и присоединения отредактированного файла...

Можно попробовать добавить вложение в открытый на редактирование документ лотуса с рт-полем через кнопку с кодом:
Код:
@Command( [EditGotoField]; имя_рт-поля );
@Command( [EditInsertFileAttachment]; имя_файла; "1");
Или вот код, который может прикрепить файл к текущему документу в рт-поле Attach с заменой старого аттача на новый, который работает в режиме чтения и редактирования документа. Код можно добавить к приведенному выше мной примеру создания пустого документа
Код:
Call offDoc.SaveAs(DocName) ' сохраняем

Dim fname As String
fname = offdoc.FullName ' полный путь к файлу docName 

Dim ws As New NotesUIWorkspace
Dim uidoc As notesuidocument
Dim doc As notesdocument

Dim RTitem As NotesRichTextItem
Dim eo As NotesEmbeddedObject
Const rtfldName ="Attach"

Set uidoc = ws.CurrentDocument ' открытый в лотусе документ
If uidoc.EditMode Then
Call uidoc.refresh(True) 
End If

Set doc = uidoc.Document

' удалить прежнее рт-поле
If doc.HasItem(rtfldName) Then 
Call doc.Removeitem(rtfldName)
Call doc.save(True, True)
End If
' создать рт-поле с документом Word/Excel
Set rtitem = New NotesRichTextItem(doc, rtfldName)
If Not RTitem Is Nothing Then 
Set eo = RTitem.EmbedObject ( EMBED_ATTACHMENT, "", fname)

Call doc.Save( True, True )
doc.ReplaceItemValue "SaveOptions" , "0"

' Закрыть Word/Excel 
Call offDoc.Close
Call offApp.Quit
'и попытаться удалить файл с диска
Err = 0
On Error Resume Next
Kill fname
On Error Goto 0
Call uidoc.Close ' закрыть документ лотуса
End If
 
O

OlyaZ

не дождалась ответа... :)
В итоге извернулась следующим образом: создала 2 пустых дока - эксель и ворд, и сохранила их в бд шаблонов. создала для них отдельное скрытое представление и сделала их невидимыми в других вьюхах. в итоге кнопка создания была практически копирована с предыдущего обсуждения с заменой имен полей и представлений...
да, мож, коряво, зато работает :)

Тебе, OKEN, все равно большое СПАСИБИЩЕ!!! на след недельке еще +1 добавлю :(
 
Мы в соцсетях:

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