[nicht lösbar?] geöffnetes Dok. als PDF per Mail vesenden

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Yad
Beiträge: 6
Registriert: Mi, 20.12.2006 22:18

[nicht lösbar?] geöffnetes Dok. als PDF per Mail vesenden

Beitrag 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?
Zuletzt geändert von Yad am Do, 25.01.2007 07:17, insgesamt 1-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag 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.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Yad
Beiträge: 6
Registriert: Mi, 20.12.2006 22:18

Beitrag 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?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag 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
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Yad
Beiträge: 6
Registriert: Mi, 20.12.2006 22:18

geht doch nicht?

Beitrag 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.
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: [nicht lösbar?] geöffnetes Dok. als PDF per Mail vesenden

Beitrag 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
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
Antworten