Импорт из вложенного файла Excel

  • Автор темы kilcher
  • Дата начала
K

kilcher

#1
Всем,доброго дня!

Необходимо вытащить данные из файла xls в поле на форме. Как это сделать с указанием пути к файлу я знаю.
Как быть,если файл лежит а ричтекст поле на этой же форме? Так же указывать путь? Или использовать GetEmbeddedObject?
Заранее спасибо,за понимание и помощь
 

abbatik

Lotus team
20.10.2008
277
0
#2
rtitem.EmbeddedObjects

Когда будешь доставать файл из ричтекста, сохранишь его на диске в темповой дирректории, откроешь по пути, по которому будешь его сохранять ;) Собственно после обработки, можешь его даже удалить, чтобы место на диске не захламлять (только не забудь закрыть объект Excel).
 
K

kilcher

#3
rtitem.EmbeddedObjects

Когда будешь доставать файл из ричтекста, сохранишь его на диске в темповой дирректории, откроешь по пути, по которому будешь его сохранять ;) Собственно после обработки, можешь его даже удалить, чтобы место на диске не захламлять (только не забудь закрыть объект Excel).
Я так понимаю без сохранения файла на диск не обойтись? :)
 

abbatik

Lotus team
20.10.2008
277
0
#4
Стандартными средствами Лотуса - нет.
А какие проблемы с сохранением? Еще раз повторюсь, что после обработки файл можно Kill-нуть ;)
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#5
kilcher
тю... детачить файл в темповую директорию... а дальше работать как обычно

Извиняюсь.... долго писал
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#6
ну воще-то потребность сохранения файла на диск, в данном случае - результат убогости реализации доступа к COM
вот ежели не пользоваться эхель файлом - то мона и не пользовать COM, и как следствие - не сохранять файло в темп
но это совсем др. история ;)
 
K

kilcher

#7
Прошу прощения,если вопрос покажется глупым. Но что то не могу найти как удалять файл по пути?
 
K

kilcher

#9

Спасибо! Ни у кого нет примера экспорта значения поля в екселевскую ячеку? Или хотя бы как правильно писать дпнную сторку в коде
xlsheet.xlCells(row, 1).Value= doc.a(0) + {}

При таком написании ошибка :) ,видимо xlsheet здесь не в кассу?
 
K

K-Fire

#10
Спасибо! Ни у кого нет примера экспорта значения поля в екселевскую ячеку? Или хотя бы как правильно писать дпнную сторку в коде
xlsheet.xlCells(row, 1).Value= doc.a(0) + {}

При таком написании ошибка :) ,видимо xlsheet здесь не в кассу?
Попробуй просто Cells() вместо xlCells. А вообще открываешь ексель, меню Сервис-Макрос-Редактор Visual Basic. Там жмешь F2 и потом на любом объекте или свойстве F1.
 
K

kilcher

#13
Возникла еще одна проблема.
В форме у меня есть ричтекст поле,из которого я беру файл Ecxel далее я его копирую в Temp,затем экспортирую данные в него.
После чего мне следует заменить файл пероначальный,на тот что лежит теперь в Temp.
Для этого я использую Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", "c:\TEMP\" & Cstr(fileCount)).

Вобщем проблема в том что файл копируется с неизвестным форматом и не в поле,а в конец документа. В чем ошибка,подскажите пожалуйста!
И вобще какого формата формируется файл(временный)в Temp?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#14
метод имеет свои ограничения..., но возможно Вам подойдет (так желательно чистить от аттачей и цеплять их поновой):
Код:
Function RemoveAttachments(objdoc As NotesDocument, fld As String) As NotesRichTextItem
Dim rtItem As NotesRichTextItem
Dim docItem As NotesItem

On Error Goto errorhandler
Set docItem=objdoc.GetFirstItem(fld)
DbgMsg("RichText:" & Cstr(docItem.Type = RICHTEXT))
If docItem.Type=RICHTEXT Then
Set rtItem=docItem
Else
Set rtItem=Nothing
End If
If objdoc.Hasembedded Then	
If ( Not rtItem Is Nothing ) Then
If (Not Isempty(rtitem.EmbeddedObjects))Then
Forall o In rtitem.EmbeddedObjects 
Call o.Remove
DbgMsg("RT field: remove attachments")
End Forall 
End If
Else
If ( Not Isempty(objdoc.EmbeddedObjects)) Then
Forall o In objdoc.EmbeddedObjects
Call o.Remove
DbgMsg("remove attachments")
End Forall
End If
End If
End If

Do While Not objdoc.GetFirstItem("$FILE") Is Nothing
objdoc.RemoveItem("$FILE")
DbgMsg("remove fields: $FILE")
Loop

If (rtItem Is Nothing) Then
Do While Not objdoc.GetFirstItem(fld) Is Nothing
objdoc.RemoveItem(fld)
DbgMsg("Remove non RT fields:" & fld)
Loop
Set rtItem=objdoc.CreateRichTextItem(fld)
End If
Set RemoveAttachments=rtItem
ExitFunction:
Exit Function
errorhandler:
Call RaiseError()
Resume ExitFunction
End Function
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#15
Возникла еще одна проблема.
В форме у меня есть ричтекст поле,из которого я беру файл Ecxel далее я его копирую в Temp,затем экспортирую данные в него.
После чего мне следует заменить файл пероначальный,на тот что лежит теперь в Temp.
Для этого я использую Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", "c:\TEMP\" & Cstr(fileCount)).

Вобщем проблема в том что файл копируется с неизвестным форматом и не в поле,а в конец документа. В чем ошибка,подскажите пожалуйста!
И вобще какого формата формируется файл(временный)в Temp?
кста эта трабла могет быть еще и из-за "нерпавильной" работы с переоткрытием и сохранением фронтэнда (индусы набокорезили)
но ежели выполнить "пральную" последовательность - усё будет нормально
где-то так:
Код:
	Dim rtItem As NotesRichTextItem
Set rtItem=RemoveAttachments(objdoc, fld)

fname=path & file		
Call rtitem.EmbedObject( EMBED_ATTACHMENT, "", fname)

'*********************************************************	
Call objdoc.Save(True,False)
Kill fname
Call uidoc.Close(True)
Set uidoc=wks.EditDocument(True,objdoc)
uidoc.AutoReload=True
Call uidoc.Refresh()
Call uidoc.Save