powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Lotus Notes Mail и ExtractFile
8 сообщений из 8, страница 1 из 1
Lotus Notes Mail и ExtractFile
    #36680177
Marchuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ подскажите как мне из письма LN сохранить приложенные файлы на жесткий диск? при помощи VBA кода.

вроде можно как-то при помощи "ExtractFile" но у меня не вышло .
есть лотусовый скприпт, но как мне его прикрутить к VBA ???

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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
...
Рейтинг: 0 / 0
Lotus Notes Mail и ExtractFile
    #36680401
AlexPhil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarchukНарод подскажите как мне из письма LN сохранить приложенные файлы на жесткий диск? при помощи VBA кода.

вроде можно как-то при помощи "ExtractFile" но у меня не вышло .
есть лотусовый скприпт, но как мне его прикрутить к VBA ???

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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


Это не VBA, это LotusScript, точнее пример из хелпа.
Что в нём не понятно? Что не вышло?

Вопрос в том, что за задачу вы решаете?
По каким документам(письмам) нужно выгружать аттачменты? Откуда будет вызываться код?
Без понимания того, что вы хотите сделать помочь сложно...

Если четко ответить на поставленный вопрос: "как мне его прикрутить к VBA". то читайте "Accessing the Domino Objects through COM", там всё описано с примерами для разных языков.
Если вы ведёте разработку в Лотус - то начните с "LotusScript Classes Coding Guidelines".
...
Рейтинг: 0 / 0
Lotus Notes Mail и ExtractFile
    #36680507
Marchuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexPhil,

я понимаю что это лотусовый скрипт,я так и написал.
мне нужен код на VBA (Excel, Accecc ) при помощи которого я могу из письма на Lotus Mail сохранять приложенный файл куда-нибудь на диск.

Как создавать письмо и прикрепить файл в письмо это я знаю , есть у меня код и он работает. теперь мне обратное надо.
...
Рейтинг: 0 / 0
Lotus Notes Mail и ExtractFile
    #36680526
Marchuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот мой код в аксесе
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
Sub tblTmp()

Dim EmailBCCTo
Dim objNotesSession As Object
Dim objNotesMailFile As Object
Dim ObjNotesDocument As Object
Dim objNotesField As Object
Dim RichTextAttachment As Object
Dim NotesAttach As Object
Dim SendMail As Boolean
Dim dbs As Database
Dim tdf As TableDef
Dim rec As Recordset
Dim qdfTemp As QueryDef
Dim dt1 As Date
Dim osh As String


Dim cs As Integer
Dim css As String

DoCmd.SetWarnings False
dt1 = Time

Set dbs = CurrentDb
Set tdf = dbs.TableDefs("Tmp")
Set rec = dbs.OpenRecordset("Tmp")

Const EMBED_ATTACHMENT As Long =  1454 
 
On Error GoTo SendMailError
 
EmailBCCTo = "" ''Optional
Set objNotesSession = CreateObject("Notes.NotesSession")


DoCmd.RunSQL ("DELETE Tmp.* FROM Tmp")


For cs =  1  To  2 
Select Case cs
    Case  1 
        Set objNotesMailFile = objNotesSession.GetDatabase("Mail/alfa-bank", "mail\*****.nsf")
        If objNotesMailFile.IsOpen = False Then objNotesMailFile.OPENMAIL
        css = "Рабочая почта"
    Case  2 
        Set objNotesMailFile = objNotesSession.GetDatabase("", "archive\a_*****")
        If objNotesMailFile.IsOpen = False Then objNotesMailFile.OPENMAIL
        css = "Архивная почта"
End Select
Debug.Print objNotesMailFile.AllDocuments.Count


For i =  4  To objNotesMailFile.AllDocuments.Count
'For i = 1 To objNotesMailFile.AllDocuments.Count
    'Debug.Print i
    Set ObjNotesDocument = objNotesMailFile.AllDocuments.GetNthDocument(i)
Debug.Print ObjNotesDocument.GetItemValue("$File")( 0 )
    rec.AddNew
    osh = "URL"
    rec.Fields("URL").Value = ObjNotesDocument.NotesURL
    
    osh = "PostedDate"
    rec.Fields("Data").Value = ObjNotesDocument.GetItemValue("PostedDate")( 0 )
    osh = "Subject"
    'Debug.Print ObjNotesDocument.GetItemValue("Subject")(0)
    rec.Fields("Subject").Value = ObjNotesDocument.GetItemValue("Subject")(0)
    osh = "body"
    rec.Fields("Body").Value = ObjNotesDocument.GetItemValue("body")(0)
    osh = "From"
    rec.Fields("From").Value = ObjNotesDocument.GetItemValue("From")(0)
    osh = "ID"
    rec.Fields("$MessageID").Value = ObjNotesDocument.GetItemValue("$MessageID")(0)
    osh = "SaveOptions"
    rec.Fields("SaveOptions").Value = ObjNotesDocument.GetItemValue("SaveOptions")(0)
    rec.Fields("Mesto").Value = css
    osh = "SendTo"
    rec.Fields("SendTo").Value = ObjNotesDocument.GetItemValue("SendTo")(0)
    rec.Update
Next i
    Set objNotesMailFile = Nothing
    Set ObjNotesDocument = Nothing
Next cs

DoCmd.RunSQL ("UPDATE Tmp INNER JOIN Data ON Tmp.[$MessageID] = Data.[$MessageID] SET Data.URL = [Tmp]., Data.Mesto = [Tmp].[Mesto], Data.SendTo = [Tmp].[SendTo]")
DoCmd.RunSQL ("INSERT INTO Data ( Data, Subject, Body, [From], URL, [$MessageID], SaveOptions, Mesto, status, [SendTo] ) SELECT Tmp.Data, Tmp.Subject, Tmp.Body, Tmp.From, Tmp.URL, Tmp.[$MessageID], Tmp.SaveOptions, Tmp.Mesto, ""НОВЫЕ"" AS status ,Tmp.SendTo FROM Data RIGHT JOIN Tmp ON Data.[$MessageID] = Tmp.[$MessageID] WHERE (((Data.[$MessageID]) Is Null))")

DoCmd.RunSQL ("DELETE Tmp.* FROM Tmp")
 
 ''Release storage
 Set objNotesSession = Nothing
 Set objNotesMailFile = Nothing
 Set ObjNotesDocument = Nothing
 Set objNotesField = Nothing
 
 Forms("Data").Refresh
 
MsgBox "Синхронизация ссылок закончена! за " & FormatDateTime((Time - dt1), vbLongTime)
 
 DoCmd.SetWarnings True
Exit Sub
 
SendMailError:

If osh = "PostedDate" Then Resume Next
Dim Msg
Msg = "Error # " & Str(Err.Number) & " was generated by " _
            & Err.Source & Chr(13) & Err.Description

MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
MsgBox "  позиция " & i & " база " & css & " поле " & osh
' открыть ошибочную запись
Application.FollowHyperlink "" & ObjNotesDocument.NotesURL & ""

Resume Next
SendMail = False

rec.Close
dbs.Close
Set r = Nothing
Set dbs = Nothing
Set objNotesSession = Nothing
 Set objNotesMailFile = Nothing
 Set ObjNotesDocument = Nothing
 Set objNotesField = Nothing

 DoCmd.SetWarnings True
 
End Sub
...
Рейтинг: 0 / 0
Lotus Notes Mail и ExtractFile
    #36680958
AlexPhil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marchuk,

Перед rec.update написать что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
' это для аттачментов в поле Бади
Set rtitem = ObjNotesDocument.GetFirstItem( "Body" )
If ( rtitem.Type = RICHTEXT ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = 1454 ) Then 'EMBED_ATTACHMENT
Call o.ExtractFile ( "c:\reports\" + o.Name)
End If
End Forall
' это для аттачментов в документе
If ObjNotesDocument.HasEmbedded Then
    Forall o In ObjNotesDocument.EmbeddedObjects
      If ( o.Type = 1454 ) Then 'EMBED_ATTACHMENT
Call o.ExtractFile ( "c:\reports\" + o.Name)
End If
    End Forall
  Else
ну и в начале добавить:
Код: plaintext
1.
Dim rtitem As Object

P.S. Не проверял.
...
Рейтинг: 0 / 0
Lotus Notes Mail и ExtractFile
    #36680966
AlexPhil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marchuk,

точнее, так:

Перед rec.update написать что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
' это для аттачментов в поле Бади
Set rtitem = ObjNotesDocument.GetFirstItem( "Body" )
If ( rtitem.Type = 1 ) Then
Forall o In rtitem.EmbeddedObjects
If ( o.Type = 1454 ) Then 'EMBED_ATTACHMENT
Call o.ExtractFile ( "c:\reports\" + o.Name)
End If
End Forall
end if
' это для аттачментов в документе
If ObjNotesDocument.HasEmbedded Then
    Forall o In ObjNotesDocument.EmbeddedObjects
      If ( o.Type = 1454 ) Then 'EMBED_ATTACHMENT
Call o.ExtractFile ( "c:\reports\" + o.Name)
End If
    End Forall
end if
ну и в начале добавить:
Код: plaintext
1.
Dim rtitem As Object

P.S. Не проверял.
...
Рейтинг: 0 / 0
Lotus Notes Mail и ExtractFile
    #36681059
Marchuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexPhil,

Forall такого в VBA нет.

кому интересно нашел решение на китайском форуме.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Sub ListItemofBody()
    Dim aNotes
    Dim aDataBase
    Dim aDocument
    Dim aView
    Dim aItem
    Dim oEmb
 
    Set aNotes = CreateObject("Notes.NotesSession")
    Set aDataBase = aNotes.CURRENTDATABASE
    Set aView = aDataBase.getview("($Inbox)")
    If (aView Is Nothing) Then
        MsgBox "Inbox view dont exist!"
    Else
        Set aDocument = aView.GETFIRSTDOCUMENT
        Set rtItem = aDocument.GETFIRSTITEM("Body")
        Debug.Print rtItem.text
        If (rtItem.Type =  1 ) Then
            For Each oEmb In rtItem.EmbeddedObjects
                'добавляю экспорт файла
                oEmb.ExtractFile ("c:\reports\" & oEmb.Name) 
                Debug.Print oEmb.Type & " " & oEmb.Name
            Next
        End If
    End If
    Set aNotes = Nothing
    Set aDataBase = Nothing
    Set aView = Nothing
    Set aDocument = Nothing
    Set aItem = Nothing
End Sub

EMBED_ATTACHMENT ( 1454 )
EMBED_OBJECT ( 1453 )
EMBED_OBJECTLINK ( 1452 )
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Lotus Notes Mail и ExtractFile
    #38117724
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexPhilЕсли четко ответить на поставленный вопрос: "как мне его прикрутить к VBA". то читайте "Accessing the Domino Objects through COM", там всё описано с примерами для разных языков.
О, вот и нашлось, что спросить у Гугли, спасибо большое :-) А то целое утро бороздю без толку...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Lotus Notes Mail и ExtractFile
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]