Выгрузка в Excel

  • Автор темы Lex-Hunter
  • Дата начала
L

Lex-Hunter

#1
Доброго времени суток!
Есть задача выгрузки данных в Excel, делаю выгрузку Attachment:
Код:
Set wObj = CreateObject("Excel.Application")
Set emo=CurrentDoc.GetAttachment("Test.xls")
Call emo.ExtractFile("С:\test")
Set WordDoc = wObj.Documents.open(xlFilename)
На строке Call emo.ExtractFile("С:\test") выдается ошибка: Object variable not set
Подскажите что не так.
 
D

D!m@n

#2
Аттачмент точно есть в документе? Полный код можно?
 

morpheus

скриптописец
07.08.2006
3 915
1
#3
Для: Lex-Hunter
Зделайте проверку
Код:
If Not emo Is Nothing Then Call emo.ExtractFile("С:\test")
 
L

Lex-Hunter

#4
Для D!m@n
Аттачмент прикреплен к форме.

Код:
Sub Click(Source As Button)
Dim CurrentUIWorkspace As NotesUIWorkspace
Dim CurrentUIDoc As NotesUIDocument	
Dim CurrentDoc As NotesDocument	
Dim WordDoc As Variant 
Dim wObj As Variant 
Dim emo As Variant 

Set CurrentUIWorkspace=New NotesUIWorkspace
Set CurrentUIDoc = CurrentUIWorkspace.CurrentDocument
Set CurrentDoc = CurrentUIDoc.Document

Set wObj = CreateObject("Excel.Application")
Set emo=CurrentDoc.GetAttachment("Test.xls")
Call emo.ExtractFile("С:\test")
Set WordDoc = wObj.Documents.open("С:\test")

WordDoc.ActiveSheet.Cells(row, col+5) = "test"
WordDoc.ActiveSheet.Cells(row, col+5).Borders.LineStyle = 1
...
...
Сори за xlFilename.
 

morpheus

скриптописец
07.08.2006
3 915
1
#5
Для: Lex-Hunter
Папробуйте через NotesEmbeddedObject и NotesRichTextItem

вот как в примерах самого лотуса

Код:
Dim doc As NotesDocument
Dim rtitem As Variant
Dim fileCount As Integer
Const MAX = 100000
fileCount = 0	
'...set value of doc...
Set rtitem = doc.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) _
And ( o.FileSize > MAX ) Then
fileCount = fileCount + 1
Call o.ExtractFile _
( "c:\reports\newfile" & Cstr(fileCount) )
Call o.Remove
Call doc.Save( True, True )
End If
End Forall
End If
 
L

Lex-Hunter

#6
Вот попробовал:
Код:
	Dim CurrentUIWorkspace As NotesUIWorkspace
Dim CurrentUIDoc As NotesUIDocument	
Dim doc As NotesDocument 
Dim rtitem As Variant
Dim fileCount As Integer

Set CurrentUIWorkspace=New NotesUIWorkspace
Set CurrentUIDoc = CurrentUIWorkspace.CurrentDocument
Set Doc = CurrentUIDoc.Document

Const MAX = 100000
fileCount = 0	
Set rtitem = doc.GetFirstItem( "Attachment" ) 
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) _
And ( o.FileSize > MAX ) Then
fileCount = fileCount + 1
Call o.ExtractFile _
( "c:\test" & Cstr(fileCount) )
Call o.Remove
Call doc.Save( True, True ) 
End If
End Forall
End If
На строке "If ( rtitem.Type = RICHTEXT ) Then" выдается ошибка: Object variable not set
 

Omh

Lotus team
04.07.2007
2 210
1
#7
Ну значит нету item'a
Если аттачмент прикреплён к форме, то логично, что item'a может и не быть.
 

morpheus

скриптописец
07.08.2006
3 915
1
#8
Для: Lex-Hunter
1. Проверте наличие поля
Код:
if not doc.hasItem( "Attachment" ) then exit sub
2. Папробуйте проверить тип поля через
If ( rtitem.Type = 1 ) ...
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#10
Если он прикреплен на форме (как embedded object), то никакого поля нет.
А значит нельзя использовать метод ExtractFile. Кстати, в хелпе это написано.
Прикрепляй в ричтекст его.
 
L

Lex-Hunter

#11
Вопрос: Как прикрепить документ к форме, так что бы потом его можно было програмно обрабатывать?
 

morpheus

скриптописец
07.08.2006
3 915
1
#12
<!--QuoteBegin-Lex-Hunter+25:10:2007, 10:08 -->
<span class="vbquote">(Lex-Hunter @ 25:10:2007, 10:08 )</span><!--QuoteEBegin-->Вопрос: Как прикрепить документ к форме, так что бы потом его можно было програмно обрабатывать?
[snapback]82977" rel="nofollow" target="_blank[/snapback]​
[/quote]
Зачем крепить к форме?


На всяк случай кусок кода - работа с прикреплёнными к документу атачами

This script gets an attachment called JIM.SAM from a document.
Код:
Dim doc As NotesDocument
Dim object As NotesEmbeddedObject
'...set value of doc...
Set object = doc.GetAttachment( "jim.sam" )
 
L

Lex-Hunter

#15
Вопрос: Как прикрепить документ к полю типа-RT на форме в дизайнере?
 
S

Sandr

#16
Если он прикреплен на форме (как embedded object), то никакого поля нет.
А значит нельзя использовать метод ExtractFile. Кстати, в хелпе это написано.
Прикрепляй в ричтекст его.
Не согласен...
Если прикрепить на бекенде файл в ричтекст, то он прикрепляется к документу... из ричтекста его потом не вытянешь - проверено неоднократно... А методы эмбедетатачмента документа такие же как эмбедет атачмента ричтекста...

Атчим примерно так:
Код:
Dim file As Variant
Dim rtItem As NotesRichTextItem
Dim obj As Variant
Dim o As notesEmbeddedObject 
Set doc = uidoc.Document
Set rtItem = doc.GetFirstItem("Body")

Let file = ws.OpenFileDialog(False,"Выберите файл для вложения!")
If Isempty(file) Then Exit Sub

If rtItem Is Nothing Then
Set rtItem = doc.CreateRichTextItem("Body")
End If


Call rtItem.EmbedObject(1454, "", Cstr(File(0)))

Экстрактим примерно так:
Код:
Dim filename As String
Dim o As NotesEmbeddedObject

If doc.HasEmbedded Then
Set o = doc.GetAttachment(doc.GetItemValue("AttachName")(0))
If Not o Is Nothing Then

On Error Resume Next
filename = Environ$("Temp") & "\" & o.Source	
On Error Goto errorProc

Else
Msgbox "Невозможно открыть вложение.", 48, "Ошибка"
Exit Function
End If

path = ws.SaveFileDialog(False,,,dr, o.Source)

If Not Isempty(path) Then
On Error Goto extracting
Open Path(0) For Input As 1
Close 1
If Msgbox ("Заменить сщуствующий " & o.Name & "?", 4 + 32 ,db.Title) = 6 Then
Call o.ExtractFile(Path(0))			
End If
End If
 
D

D!m@n

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#19
<!--QuoteBegin-Sandr+25:10:2007, 11:36 -->
<span class="vbquote">(Sandr @ 25:10:2007, 11:36 )</span><!--QuoteEBegin-->Если прикрепить на бекенде файл в ричтекст, то он прикрепляется к документу... из ричтекста его потом не вытянешь - проверено неоднократно... А методы эмбедетатачмента документа такие же как эмбедет атачмента ричтекста...
[snapback]82990" rel="nofollow" target="_blank[/snapback]​
[/quote]
Документ и форма немного разные вещи. :)