Seite 1 von 1
[nicht lösbar?] geöffnetes Dok. als PDF per Mail vesenden
Verfasst: Mo, 22.01.2007 14:53
von Yad
Ich möchte ein geöffnetes sxw-Dokument als PDF-Anhang per E-Mail verschicken und dabei sowohl E-Mail-Empfänger, Betreff und Text der E-Mail automatisch befüllen. Das Dokument soll nicht extra gespeichert werden.
Eine geöffnetes Dokument kann ich natürlich mittels
Code: Alles auswählen
sub Main
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:SendMailDocAsPDF", "", 0, Array())
end sub
als PDF-Anhang versenden. Aber wie bekomme ich meine Daten in die E-Mail (Betreff, Empfänger und Text liegen als String-Variablen vor)?
Eine normale E-Mail kann ich auch generieren (auch mit Anhang, wenn die anzuhängende Datei bereits gespeichert ist):
Code: Alles auswählen
oMailer = createUnoService("com.sun.star.system.SimpleSystemMail")
MailProgramm = oMailer.querySimpleMailClient()
NeueNachricht = MailProgramm.createSimpleMailMessage()
NeueNachricht.setRecipient("xxxxx@gmx.de")
NeueNachricht.setSubject( "test" )
Mailprogramm.sendSimpleMailMessage(Neuenachricht, 0 )
Wie kombiniere ich dies aber mit dem PDF-Anhang? Ich will das geöffnete Dokument nicht als PDF speichern, da ich ja dann extra einen Namen angeben muss und das gespeicherte Dokument auch nachträglich wieder löschen muss.
Wahrrscheinlich ist alles ganz simpel, aber ich habe trotz Durchsuchen dieses Forums, der üblichen Hilfen usw. keine Lösung gefunden. Wer kann mir kurz auf die Sprünge helfen?
Verfasst: Di, 23.01.2007 02:06
von komma4
In einer der üblichen Quellen
(Andrews Freies Makro Dokument) steht Deine Lösung auf Seite 80, in meinem (wohl veralteten) *.sxw auf S.73.
Verfasst: Di, 23.01.2007 10:04
von Yad
Hallo Winfried,
das Dokument kannte ich noch nicht, vielen Dank!
Leider finde ich dort nur den Hinweis zum Anhängen wie bereits bekannt.
Code: Alles auswählen
Dim vAttach(0)
vAttach(0) = "file:///c:/macro.txt"
vMessage.setAttachement(vAttach())
Die anzuhängende Datei ist jedoch noch nicht gespeichert (die Datei wird von dem Makro erst erstellt und soll dann als PDF an eine Mail angehängt werden), so dass ich auch keinen Pfad angeben kann.
Mein Problem ist das Versenden des gerade erstellten und geöffneten Dokumentes als PDF-Anhang und das gleichzeitige "Befüllen" von Mailempfänger, Mail-Betreff und Mail-Text (liegt alles als String-Variable vor) in einem Makro.
Hast Du da noch eine Idee?
Verfasst: Di, 23.01.2007 11:06
von komma4
Yad hat geschrieben:... so dass ich auch keinen Pfad angeben kann.
Zuvor Speichern (im /temp, dann wegschmeissen)?
Nein, ich habe mich mit dem Thema nicht beschäftigt.
Auffällig im "alten" *.sxw-Dokument war für mich der Satz, dass Mail mit Text UND attachment nicht ginge (Stand: 2004 / OOo 1.x ???).
Vielleicht googelst Du selbst mal nach "simplemailmessage" und "openoffice" und versuchst Dich an der Adaption der Fundstellen...
Viel GLück
geht doch nicht?
Verfasst: Do, 25.01.2007 07:15
von Yad
Eine Kombination der Funtionen aus "uno:SendMailDocAsPdf" mittels dispacher und "sendSimpleMailMessage" scheint es nicht zu geben - mein Problem bleibt wohl ungelöst.
Zusätzlich wird xxx.SetAttachement() erst seit OO2.0 unterstützt - da bei mir jedoch reproduzierbar Abstürze von OO2.0 im Zusammenhang mit einem einfahcen Makro auftraten habe ich auf OO1.5 "zurückgestellt".
Ich werde wohl vorerst die bisherige Art und Weise des Mailversandes behalten, das Ergebnis ist nicht ganz so hübsch und es bleibt jedes Malnoch manuelle Fummelei.
Re: [nicht lösbar?] geöffnetes Dok. als PDF per Mail vesenden
Verfasst: Sa, 26.09.2009 12:35
von geimist
Hallo,
hatte gerade selbst diese Aufgabenstellung. Der nachstehende Code generiert aus einem Datenbankbericht ein PDF und übergibt es einer Liste von Empfängern, welche in der Tabelle "Adressen" in der Datenbank (und den Wert "true" in der Spalte "Ist_im_Mailverteiler" haben).
Allerdings kann man WindowsMail (Vista) keinen Anhang übergeben, daher habe ich parallel Thunderbird installieren müssen.
Code: Alles auswählen
Sub PDFMail
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
GlobalScope.BasicLibraries.LoadLibrary("Tools")
End If
'========= Temp-Pfad auslesen:
oPfad = CreateUnoService("com.sun.star.util.PathSettings")
tmpURL = oPfad.temp
tmpURL = tmpURL & "/Datenbank_Mailer/Bericht.pdf"
'========= Pfad von eMailprogramm auslesen:
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatenquelle = DatabaseContext.getByName("Datenbankname")
If not oDatenquelle.IsPasswordRequired Then
oDatVerb = oDatenquelle.getConnection("","") '("Benutzername","Passwort")
else
oHandler = oDatenquelle.createUnoService("com.sun.star.sdb.InteractionHandler")
oDatVerb = oDatenquelle.ConnectWithCompletion(oHandler)
End If
'========= Bericht laden:
Dim Context AS Object
Dim Conn As Object
Dim DB As Object
Dim ReportDoc As Object
Dim Args(2) As New com.sun.star.beans.PropertyValue
Dim ReportName As String
ReportName = "Name_des_Berichtes"
Context=CreateUnoService("com.sun.star.sdb.DatabaseContext")
DB=Context.getByName("Datenbankname")
Conn=DB.getconnection("","")
Args(0).Name="ActiveConnection" : Args(0).Value=Conn
Args(1).Name="OpenMode" : Args(1).Value="open"
Args(2).Name="Hidden" : Args(2).Value=true
ReportDoc=DB.DatabaseDocument.ReportDocuments.loadComponentFromURL(ReportName,"_self",2,Args)
'========= Bericht als PDF unter TMP speichern:
DIM dokument AS OBJECT
dokument = ReportDoc
DIM filter AS STRING
IF dokument.supportsService( "com.sun.star.text.TextDocument" ) THEN
filter = "writer_pdf_Export"
ELSEIF dokument.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) THEN
filter = "calc_pdf_Export"
ELSEIF dokument.supportsService( "com.sun.star.presentation.PresentationDocument" ) THEN
filter = "impress_pdf_Export"
ELSEIF dokument.supportsService( "com.sun.star.draw.DrawDocument" ) THEN
filter = "draw_pdf_Export"
Else
MsgBox "Dokument-Typ unbehandelt."
Exit Sub
End If
DIM Eigenschaften( 1 ) AS New com.sun.star.beans.PropertyValue
Eigenschaften( 0 ).Name = "FilterName"
Eigenschaften( 0 ).Value = filter
Eigenschaften( 1 ).Name = "CompressMode"
Eigenschaften( 1 ).Value = 0
dokument.storeToUrl( tmpURL, Eigenschaften( ) )
ReportDoc.close(true) 'Bericht schliessen
'========= Daten der Empfänger auslesen:
sSQL = "SELECT ""eMail"" FROM ""Adressen"" WHERE ""Ist_im_Mailverteiler"" = 1"
oErgSet = oStatement.executeQuery( sSQL )
sMailString = " "
If not isNull (oErgSet) then
Do while oErgSet.Next()
sMailString = sMailString & oErgSet.getString(1) & ","
loop
End If
sMailString = "'" & sMailString & "'"
empf = sMailString
betr = "das aktuelle PDF-Dokument"
anrT = "Hallo.<br><br>Hier kommt ein PDF per eMail.<br><br>Liebe Grüße"
attA = ConvertToURL (tmpURL)
'========= Mail an Mailer übergeben und versenden
shell("C:\Program Files\Mozilla Thunderbird\thunderbird.exe",1,"-compose to=,bcc="+empf+",subject="+betr+",body="+anrT+",attachment="+attA)
Exit Sub