Daten aus e-mail Thunderbird in OO Base Tabelle übernehmen?

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Lord Nelson
*
Beiträge: 19
Registriert: Fr, 10.06.2011 19:40

Daten aus e-mail Thunderbird in OO Base Tabelle übernehmen?

Beitrag von Lord Nelson »

Ich bekomme täglich e-mails von meinem Arbeitgeber und möchte die darin enthaltenen Daten (Name, Personalnummer ect.) automatisch von Base auslesen lassen und in eine Tabelle abspeichern. Jetzt gebe ich noch immer alles händisch in die DB ein. :-(

Ist so etwas möglich und wie verfahre ich da? Hat Jemand so eine Art How-To-Do für mich?

Grüße

Peter
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von komma4 »

Lord Nelson hat geschrieben:Ist so etwas möglich
Nein, Base kann so etwas nicht.

Du kannst sicherlich die Mails als Text speichern, einen Parser in Basic schreiben und dann nach Base importieren.... oder?
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)
Lord Nelson
*
Beiträge: 19
Registriert: Fr, 10.06.2011 19:40

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von Lord Nelson »

Dann muss ich wohl weiter mit der Hand eingeben, denn sowas kann ich leider nicht!
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von komma4 »

Lord Nelson hat geschrieben:denn sowas kann ich leider nicht!
Dann könntest Du hier vielleicht mal nett anfragen. ob Dir einer dabei helfen kann...

Speichere eine solche Mail mal, dann anonymisiere die Daten und hänge die so geänderte Datei an ein Posting an. Mal sehen, was wir für Dich tun können...
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)
Lord Nelson
*
Beiträge: 19
Registriert: Fr, 10.06.2011 19:40

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von Lord Nelson »

Okay, dann versuche ich es mal:

Hier die betreffende e-mail: die sehen vom Aufbau immer gleich aus:
Reklamation-Nr.: 12345
Zustellungsdatum: 01.02.13 Titel: 123 Bezirk: 12345
Straße: Straßenname Haus Nr.:12 Name: Nachname Telefon-Leser: 01234/12345
Zusteller: 1234 Name: Zustellername Telefon: 12345/12345
Achtung!
Seit Wochen kommt die Zeitung nur 14-Tägig
oder gar nicht. Wiederholte Reklamation!
Die Unterstreichungen sind immer die wechselnden Daten. Vielleicht ist ja Jemand so nett und hilft einem Halbwissenden.

Gruss Peter
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von komma4 »

Lord Nelson hat geschrieben:und hilft einem Halbwissenden
Welche Hälfte weisst Du denn?


Wie ist Deine Tabelle aufgebaut?
Welche Inhalte sollen gespeichert werden?
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)
Lord Nelson
*
Beiträge: 19
Registriert: Fr, 10.06.2011 19:40

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von Lord Nelson »

Okay,

so sieht meine Tabelle aus:

Reklamationsnr. | Datum | Grund | Anrufer | Straße |Haus-Nr.| Ort | Telefon | Bezirk | Zusteller | Pers.Nr. | Telefon Zust. | erledigt |
[Primärschlüssel] [Date] [TXT] [TXT] [TXT] [Zahl] [TXT] [Zahl] [Zahl] [TXT] [Zahl] [Zahl] [Ja/Nein]

Aus der e-mail sollen dann die Daten:

e-mail-Inhalt Tabellenspalten

Reklamation-Nr.: 12345 -> nach -> Tabelle Reklamationsnr. [Primärschlüssel]
Zustellungsdatum: 01.02.13 -> nach -> Tabellenspalte Datum [Date]
Bezirk: 12345 -> nach -> Bezirk [Zahl]
Straße: Straßenname -> nach -> Straße [TXT]
Haus Nr.:12 -> nach -> Haus-Nr. [Zahl]
Name: Nachname -> nach -> Anrufer [TXT]
Telefon-Leser: 01234/12345 -> nach -> Telefon [Zahl]
Zusteller: 1234 -> nach -> Pers.Nr. [Zahl]
Zustellername Telefon: 12345/12345 -> nach -> Telefon Zust. [Zahl] Achtung!

Seit Wochen kommt die Zeitung nur 14-Tägig -> nach -> Grund [TXT]
oder gar nicht. Wiederholte Reklamation!

Gespeichert werden sollen also alle im letzten Threadt unterstrichenen Zeichen. Ich hoffe, ich konnte dies so verdeutlichen.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von komma4 »

Zunächst mal ein paar Anmerkungen zu Deinem Tabellenentwurf:

Lord Nelson hat geschrieben: Haus Nr.:12 -> nach -> Haus-Nr. [Zahl]
[...]
Telefon-Leser: 01234/12345 -> nach -> Telefon [Zahl]
[...]
Zustellername Telefon: 12345/12345 -> nach -> Telefon Zust. [Zahl]

a) "Haus Nr." können nach meiner Erfahrung auch lauten: "10-12" oder "1a": Datentyp ZAHL ungeeignet; nimm TEXT
b) "Telefon-Leser": mit dem Trenner "/" nicht als ZAHL speicherbar, auch geht die Vorwahl-Null verloren; nimm TEXT
c) desgleichen für "Zustellername Telefon"



Der Rest ist Fleissarbeit gewesen.
Bei manchen Spaltenwerten habe ich die Position des Bezeichners ermittelt und den Wert dann ausgeschnitten.
Bei anderen Werten konnte ich eine Hilfsroutine aus der Bibliothek TOOLS nutzen, die einen Teilstring, eingefasst durch zwei bekannte Zeichenketten, ausschneidet.

Das sieht dann so aus:

Code: Alles auswählen

Sub de48860

GlobalScope.BasicLibraries.loadLibrary( "Tools" )

' 2011-07-11

' hier anpassen ! ! ! ! ! 
' 
sTempDatei = "/home/BENUTZER/testdata/thunderbird.txt"

On Error Goto ERR_1
iNumber = Freefile

On Error Resume Next


Open sTempDatei For Input As iNumber

While not EOF( iNumber)
 
 Line Input #iNumber, sZeile
 
 ' Position des ersten Doppelpunktes
 iPosDoppelpkt = INSTR( 1, sZeile, ":" )


 ' bestimmt den Typ der Zeile
 Select Case iPosDoppelpkt
 
    Case 16 ' "Reklamation-Nr.:"
       idRekla = _
       MID( sZeile, iPosDoppelpkt+2 , LEN (sZeile)-iPosDoppelpkt+1 )

    Case 17 ' "Zustellungsdatum:"
       dZustell =  FindPartString( sZeile, "Zustellungsdatum: ", " Titel: ", 1 )
       iPosBezirk = INSTR( sZeile, "Bezirk: " )
       iBezirk = TRIM ( MID( sZeile, iPosBezirk+6 ) )

    Case 7 ' "Straße"
       sStrasse = FindPartString( sZeile, "Straße: ", "Haus Nr.:", 1 )
       iHausNr = FindPartString( sZeile, "Haus Nr.:", "Name:", 1 )
       sAnrufer = FindPartString( sZeile, "Name:", "Telefon-Leser", 1 )
       iPosTelLeser = INSTR( sZeile, "Telefon-Leser" )
       sTelLeser = MID( sZeile, iPosTelLeser+14 )
       
    Case 10 ' "Zusteller:"
       sPersNr = FindPartString( sZeile, "Zusteller: ", "Name:", 1 )
       iPosTel = INSTR( sZeile, "Telefon:" )
       sZustTel = MID( sZeile, iPosTel+9 )

    Case Else
       sBemerk = sBemerk & sZeile & " "
 End Select

WEnd
 
Close #iNumber


print "rekl " & idRekla
print "datum " & dZustell
print "bezirk " & iBezirk
print "str " & sStrasse
print "hnr " & iHausNr
print "anrufer " & sanrufer
print "telLeser " & sTelLeser
print "PersNr " & sPersNr
print "Tel " & sZustTel
print sbemerk


End Sub

Bedeutet für Dich erstmal:
1) Nachricht aus Thunderbird als Text speichern (bspw. unter "c:\temp\thunderbird.txt") - immer am gleichen Ort und mit gleichem Namen
2) den Dateinamen im Skript anpassen !
3) die Routine de48860 in/aus OOo abrufen



Bekommst Du damit bei Deinen Testdaten (nimm zum Testen verschiedene Datensätze) die richtigen Ergebnisse?

Dann machen wir im nächsten Schritt mit den Befehlen zum Einfügen in die Datenbank weiter.
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)
Lord Nelson
*
Beiträge: 19
Registriert: Fr, 10.06.2011 19:40

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von Lord Nelson »

Hallo Winfried,

okay
a) "Haus Nr." können nach meiner Erfahrung auch lauten: "10-12" oder "1a": Datentyp ZAHL ungeeignet; nimm TEXT
b) "Telefon-Leser": mit dem Trenner "/" nicht als ZAHL speicherbar, auch geht die Vorwahl-Null verloren; nimm TEXT
c) desgleichen für "Zustellername Telefon"


Das habe ich geändert. Danke für den Tipp.

Jetzt wird es für mich etwas schwieriger zu verstehen. Ich habe das jetzt so verstanden, dass ich in OO ein Makro bauen muss. Richtig? Also habe ich unter

Makros - verwalten-Open Office Basic-NEU

ein neues Makro geöffnet und Deine Arbeit hineinkopiert.

Anschließend habe ich 1. erledigt und 2. das Script mit meinem Pfad angepasst. Allerdings: C:\Users\NAME\Favorites\NN\Bezirke-Zusteller/REKLAMATION.txt (Windows Vista)

Das dann abgespeichert als de48860 und ausführen lassen.

Ergebnis:
Ich bekomme die Fehlermeldung:
Basic-Syntaxfehler Label ERR_1 undefiniert
Gruß

Peter
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von komma4 »

Lord Nelson hat geschrieben:Richtig?
Richtig.
Basic-Syntaxfehler Label ERR_1 undefiniert
Der Abschnitt ist beim Kopieren verloren gegangen.

Füge ein -nach den PRINT Anweisungen- :

Code: Alles auswählen

Exit Sub
' ------------------------------------------------------------------

ERR_1:


MsgBox _
		"Fehler beim Versuch eine Dateinummer zu erhalten." & CHR(10) _
		& CHR(10) & "Erklärung:" _
		& CHR(10) & "Zu viele geöffnete Dateien."_
		& CHR(10) & "Makro " & sMakroName & "wird nun beendet." _
		, 48 , sMakroName & sMakroVersion

Die letzte Zeile lautet dann End Sub

Und dazu am Anfang, direkt nach dem SUB

Code: Alles auswählen

sMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"
Damit sollte es laufen... teste bitte
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)
Lord Nelson
*
Beiträge: 19
Registriert: Fr, 10.06.2011 19:40

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von Lord Nelson »

Wenn ich oben das so eingetragen habe:
SubsMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"de48860

GlobalScope.BasicLibraries.loadLibrary( "Tools" )...

Kriege ich folgende Fehlermeldung:
Basic Syntaxfehler erwartet: Sub
Wenn ich die obere Zeile weglasse und nur den zuerst von Dir beschriebenen Absatz unter Print einfüge, dann kommen einige Meldungen, die ich mit Okay beantworten kann und zum Schluss öffnet sich ein Fenster, indem der Zusteller mit Name und Telefon vermerkt ist und auch der Grund der Reklamation. Das müsste auch noch getrennt werden.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von komma4 »

Lord Nelson hat geschrieben:
SubsMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"de48860

Code: Alles auswählen

Sub de48860

sMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"
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)
Lord Nelson
*
Beiträge: 19
Registriert: Fr, 10.06.2011 19:40

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von Lord Nelson »

Okay, jetzt habe ich genau verstanden, wo der letzte Script hinsollte. :D

Jetzt bekomme ich nacheinander 10 Fenster, die ich mit Okay oder Abbrechen schließen kann:
1. Fenster= rekl 1234 Name:Richtiger Name Telefon:01234-1234567 = richtig

rekl ist aber als Ergebnis die Personal-nr. des Zustellers.

2.datum = leer

3.bezirk = leer

4. str = leer

5.hnr= leer

6. anrufer = leer

7. telLeser = 7:04:36 UT

8. PersNr = leer

9. Tel ion-Nr: 36058 (das ist aber die Reklamationsnr.)

10. Betreff:REKLAMATION Von:logitik@prospekte.de Datum: An: Peter@t-online.de
Zustelldatum:09,07.11 Titel:021 Bezirk:11146 Straße:StraßenStr. HausNr.:21
Name:Leser Telefon-Leser:0123/1234565
Wiederholte Reklamation: 2 in 1 Woche Achtung!Hier muss auch regelmäßig
zugestellt werden!Zeitung muss bis 16 Uhr verteilt werden!!!!
Lord Nelson
*
Beiträge: 19
Registriert: Fr, 10.06.2011 19:40

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von Lord Nelson »

Habe ein wenig an den Nummern hinter Case rumprobiert, jetzt sieht es so aus:
Sub de48860

sMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"

GlobalScope.BasicLibraries.loadLibrary( "Tools" )

' 2011-07-13

' hier anpassen ! ! ! ! !
'
sTempDatei = "C:\Users\Peter\Favorites\Zusteller/REKLAMATION.txt"

On Error Goto ERR_1
iNumber = Freefile

On Error Resume Next


Open sTempDatei For Input As iNumber

While not EOF( iNumber)

Line Input #iNumber, sZeile

' Position des ersten Doppelpunktes
iPosDoppelpkt = INSTR( 7, sZeile, ":" )


' bestimmt den Typ der Zeile
Select Case iPosDoppelpkt

Case 16 ' "Reklamation-Nr.:"
idRekla = _
MID( sZeile, iPosDoppelpkt+2 , LEN (sZeile)-iPosDoppelpkt+1 )

Case 20 ' "Zustellungsdatum:"
dZustell = FindPartString( sZeile, "Zustellungsdatum: ", " Titel: ", 1 )
iPosBezirk = INSTR( sZeile, "Bezirk: " )
iBezirk = TRIM ( MID( sZeile, iPosBezirk+6 ) )

Case 10 ' "Straße"
sStrasse = FindPartString( sZeile, "Straße: ", "Haus Nr.:", 1 )
iHausNr = FindPartString( sZeile, "Haus Nr.:", "Name:", 1 )
sAnrufer = FindPartString( sZeile, "Name:", "Telefon-Leser", 1 )
iPosTelLeser = INSTR( sZeile, "Telefon-Leser" )
sTelLeser = MID( sZeile, iPosTelLeser+14 )

Case 13 ' "Zusteller:"
sPersNr = FindPartString( sZeile, "Zusteller:", "Name:", 1 )
iPosTel = INSTR( sZeile, "Telefon:" )
sZustTel = MID( sZeile, iPosTel+9 )

Case Else
sBemerk = sBemerk & sZeile & " "
End Select

WEnd

Close #iNumber


print "rekl " & idRekla
print "datum " & dZustell
print "bezirk " & iBezirk
print "str " & sStrasse
print "hnr " & iHausNr
print "anrufer " & sanrufer
print "telLeser " & sTelLeser
print "PersNr " & sPersNr
print "Tel " & sZustTel
print sbemerk

Exit Sub
' ------------------------------------------------------------------

ERR_1:


MsgBox _
"Fehler beim Versuch eine Dateinummer zu erhalten." & CHR(10) _
& CHR(10) & "Erklärung:" _
& CHR(10) & "Zu viele geöffnete Dateien."_
& CHR(10) & "Makro " & sMakroName & "wird nun beendet." _
, 48 , sMakroName & sMakroVersion

End Sub

Sub Main

End Sub
Ich bekomme jetzt die einzelnen Daten in den Fenstern richtig angezeigt. Nur bei Case 20 wird der Titel und bei Case 13 komplett ignoriert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

Beitrag von komma4 »

Lord Nelson hat geschrieben:Habe ein wenig an den Nummern hinter Case rumprobiert
Schön, dass Du etwas probieren willst... allerdings solltest Du auch verstehen, was Du änderst.

Die Anweisung

Code: Alles auswählen

iPosDoppelpkt = INSTR( 7, sZeile, ":" )
ist im Code dokumentiert mit:

' Position des ersten Doppelpunktes

In einer Zeile, die mit Zustellungsdatum: beginnt, ist dies Stelle 17

Bei der Zeile Zusteller: ist das Position 10.

Da kann dann CASE 20 oder 13 nicht greifen.


Das Problem, was ich nun mit Dir habe, ist dass Du unterschiedliche Anforderungen stellst.

In Deiner 1. Beispielmail war Deine erste Zeile Reklamation-Nr.: 12345, nun ist das Betreff:REKLAMATION - von der Rekl.-Nr., die ja als DB-Primärschlüssel dienen soll nichts zu sehen.

1. Testdaten: Zustellungsdatum:, nun Zustelldatum:

Im ersten Beispiel "Straße:" zum Zeilenbeginn, nun in am Ende einer Zeile.

Wo ist nun Dein "Zusteller"?



So kann nur mit VIEL MEHR Aufwand ein Parser geschrieben werden (indem alle möglichen Schreibweisen und Positionen berücksichtigt werden).
Und dazu ist mir meine Zeit zu schade...

Solltest Du Interesse und die Muse haben, das selbst umzusetzen, helfen wir gerne.
Das Prinzip sollte klar sein: mit der Funktion FindPartString bekommst Du die Zeichen zwischen zwei angegebenen Begrenzern.
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)
Antworten