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

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

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

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

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

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

kilcher

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

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

abbatik

rtitem.EmbeddedObjects

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

kilcher

rtitem.EmbeddedObjects

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

Я так понимаю без сохранения файла на диск не обойтись? :)
 
A

abbatik

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

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
kilcher
тю... детачить файл в темповую директорию... а дальше работать как обычно

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
ну воще-то потребность сохранения файла на диск, в данном случае - результат убогости реализации доступа к COM
вот ежели не пользоваться эхель файлом - то мона и не пользовать COM, и как следствие - не сохранять файло в темп
но это совсем др. история ;)
 
K

kilcher

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

kilcher



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

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

K-Fire

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

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

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

kilcher

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

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
214
метод имеет свои ограничения..., но возможно Вам подойдет (так желательно чистить от аттачей и цеплять их поновой):
Код:
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
7 941
609
BIT
214
Возникла еще одна проблема.
В форме у меня есть ричтекст поле,из которого я беру файл 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
 
Мы в соцсетях:

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