BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[GELÖST] Umsatzdatei einer Bank importieren

Alles zur Programmierung im LibreOffice.
Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Umsatzdatei einer Bank importieren

Beitrag von Ich Bins » So 8. Dez 2019, 20:48

Hallo mikele,
mit meinen Mitteln bin ich zumindest so weit gekommen.
Auf diese Weise war es für mich F8 für F8 sichtbar was gerade vorgeht.
Ja, ich will neue Daten "nur" anfügen.

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Umsatzdatei einer Bank importieren

Beitrag von Ich Bins » Mo 9. Dez 2019, 23:40

Hallo mikele,

Deinen Code der IBAN und BIC findet konnte ich erfolgreich in das Makro BBB integrieren.

Bis auf das Auffinden von LASTSCHRIFT, GUTSCHRIFT, DAUERAUFTRAG etc. im Feld Vorgang/Verwendungszweck und Einfügen in das Feld Vorgang und dem Ersetzen der Zeilenumbrüche durch Leerzeichen entspricht das Makro nun fast meinen Vorstellungen.

Code: Alles auswählen

Sub BBB()

Dim oKontoDoc as Object, oImportDoc as Object, oExtCSVBlatt as Object

	'Kontoauszug.ods als Objekt in Variable schreiben
	oKontoDoc = ThisComponent
	'Dateiauswahl-Dialog erzeugen
	oFilePicker = createUnoService("com.sun.star.ui.dialogs.FilePicker")
	oFilePicker.setMultiSelectionMode(False)
	'Filter für die Dateiauswahl initialisieren
	oFilePicker.appendFilter("Alle Dateien", "*.*") 	
	oFilePicker.appendFilter("csv - Dateien", "*.csv")
	'Filter für cvs-Dateien aktivieren
	oFilePicker.setCurrentFilter("csv - Dateien")
	'Dialog aufrufen und auswerten
	if oFilePicker.execute()=1 then 'wenn nicht abgebrochen
		'Auslesen der gewählten Datei
		oFiles= oFilePicker.getFiles() 'url der datei
		'Setzen der Importoptionen
		sFileURL=oFiles(0)
		Dim Args(2) as New com.sun.star.beans.PropertyValue
		args(1).Name = "FilterName"
		args(1).Value = "Text - txt - csv (StarCalc)"
		args(2).Name = "FilterOptions"
		args(2).Value = "59,34,0,1,2/4/3/4,0,false,true,true"
		'Öffnen des Dokuments
	    oImportDoc = StarDesktop.loadComponentFromURL(sFileURL,"_blank", 0, Args())
	end if
	varArbeitsblatt = split(oImportDoc.Title,"_")(1)
'	Zugriff auf das 1. Tabellenblatt
	oExtCSVBlatt = oImportDoc.Sheets(0)
'   Erste Zeilen löschen: Index und Anzahl
    myrows=oExtCSVBlatt.getrows
    myrows.removebyindex(0,12)
'   letzte Zelle des Bereiches
	ocursor = oExtCSVBlatt.createCursor()
	ocursor.gotoStart()	
	ocursor.gotoEndofUsedArea(false)			
'   index letzte Spalte des Bereichs
'    varLetzteSpalte = ocursor.getRangeAddress.endColumn
'   index letzte Zeile des Bereichs
	varLetzteZeile = ocursor.getRangeAddress.endRow
'   letzt drei Zeilen löschen	  
    myrows.removebyindex(varLetzteZeile - 2,varLetzteZeile)
	oExtCSVSpalte=oExtCSVBlatt.getColumns
'	IBAN und BIC suchen und in Felder schreiben
	for i=1 to varLetzteZeile - 3
		sText=oExtCSVBlatt.getCellByPosition(8,i).string
		sText=join(split(sText,chr(10)),"")
		posIBAN=instr(sText,"IBAN:")
		if posIBAN>0 then
			sIBAN=left(ltrim(mid(sText,posIBAN+5)),22)
		end if		
		posBIC=instr(sText,"BIC:")
		if posBIC>0 then
			sBIC=left(ltrim(mid(sText,posBIC+4)),11)
		end if		
		mycell = oExtCSVBlatt.getCellByPosition(4,i)
		mycell.string=sIBAN	    
		mycell = oExtCSVBlatt.getCellByPosition(6,i)
		mycell.string=sBIC
	next

	'Quell- und Zielspalten für Verschiebung
	aQuelle=array("D","A","C","L","M","E","G","I","B")
    aZiel=array("N","O","P","Q","R","S","T","V","W")
	'Kopieren
	for i=0 to ubound(aQuelle)
		oQuelleRange=oExtCSVSpalte.getByName(aQuelle(i))
		oQuellRangeAddresse = oQuelleRange.getRangeAddress
		oZiel = oExtCSVSpalte.getByName(aZiel(i)).getCellByPosition(0,0)
		oZielCellAdresse=oZiel.getCellAddress
		oExtCSVBlatt.copyRange(oZielCellAdresse,oQuellRangeAddresse)
	next
	'Spalten leeren
	oExtCSVSpalte.getByName("A").ClearContents(1023)
	oExtCSVSpalte.getByName("B").ClearContents(1023)
	oExtCSVSpalte.getByName("C").ClearContents(1023)
'   Spalten löschen
    oExtCSVSpalte.removeByIndex(3,1)
    oExtCSVSpalte.removeByIndex(3,1)
    oExtCSVSpalte.removeByIndex(3,1)
    oExtCSVSpalte.removeByIndex(3,1)
    oExtCSVSpalte.removeByIndex(3,1)
    oExtCSVSpalte.removeByIndex(3,1)
    oExtCSVSpalte.removeByIndex(3,1)
    oExtCSVSpalte.removeByIndex(3,1)
    oExtCSVSpalte.removeByIndex(3,1)
    oExtCSVSpalte.removeByIndex(3,1)
	'neue Spaltenüberschriften
	oExtCSVBlatt.getCellByPosition(0,0).string="ID"
	oExtCSVBlatt.getCellByPosition(1,0).string="Flag"
	oExtCSVBlatt.getCellByPosition(2,0).string="Vorgang"
	oExtCSVBlatt.getCellByPosition(3,0).string="Buchungstext"
	oExtCSVBlatt.getCellByPosition(5,0).string="Kontoinhaber"
	oExtCSVBlatt.getCellByPosition(6,0).string="Betrag"
	oExtCSVBlatt.getCellByPosition(7,0).string="S_H"
	oExtCSVBlatt.getCellByPosition(8,0).string="IBAN/Kontonummer"
	oExtCSVBlatt.getCellByPosition(9,0).string="BIC/BLZ"
	oExtCSVBlatt.getCellByPosition(10,0).string="Saldo"
	oExtCSVBlatt.getCellByPosition(11,0).string="Verwendungszweck"
	oExtCSVBlatt.getCellByPosition(12,0).string="Valutadatum"	
'   Spaltenüberschrift fett formatieren
	oRange = oExtCSVBlatt.getCellRangeByName("A1:M1")
  	oRange.CharWeight = com.sun.star.awt.FontWeight.BOLD
'   Spaltenbreite optimieren
	For iSl = 0 to 10
		oExtCSVBlatt.Columns(iSl).OptimalWidth = True
	next iSl
    oExtCSVBlatt.Columns(11).Width = 4000
	oExtCSVBlatt.Columns(12).OptimalWidth = True	
'   Reihenfolge vertauschen
	oCellCursor = oExtCSVBlatt.createCursor
    oCellCursor.GotoEndOfUsedArea(False)
    oBereich=oExtCSVBlatt.getCellRangeByPosition(0,1,oCellCursor.getRangeAddress().endColumn,oCellCursor.getRangeAddress().endRow)
    'Zellinhalt in Array lesen
    aDaten()=oBereich.getDataArray
    'Zeilen- und Spaltenanzahl merken
    zeilen=ubound(aDaten())
    spalten=ubound(aDaten(0))
    'Zeilen vertauschen
    for i=0 to zeilen/2
		tmp=aDaten(zeilen-i)
		aDaten(zeilen-i)=aDaten(i)
		aDaten(i)=tmp
    next
'   ab hier stehen die aufbereiteten Daten zur Verfügung
'   letzte nicht leere Zeile in der Kontodatei ermitteln
	oZiel = oKontoDoc.Sheets().getByName(varArbeitsblatt)
	ocursor = oZiel.createCursor()
	ocursor.gotoEndofUsedArea(false)
	varEinfuegezeile = ocursor.getRangeAddress.endRow + 2
'   Bereich zum Einfügen festlegen
'	Der Bereich muss dieselbe Größe haben, wie der Ursprungsbereich!
    oZielBereich = oZiel.getCellRangeByPosition(0,varEinfuegezeile,0+spalten,varEinfuegezeile+zeilen)
'   die nächste Zeile fügt die gedrehten Daten in die csv-Datei ein   
	oZielBereich.setDataArray(aDaten)
'   csv-Datei schließen
	oImportDoc.close(false)
End Sub

Wanderer
Beiträge: 895
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Umsatzdatei einer Bank importieren

Beitrag von Wanderer » Mi 25. Dez 2019, 14:04

mikele hat geschrieben:
So 8. Dez 2019, 17:45
Hallo,
ja klar, die IBAN ist 22-stellig. Die BIC ist leider 8- bis 11-stellig. ...
Kleine Warnung: Sobald internationale Konten im Spiel sind, variiert auch die Länge der IBAN.
Auswendig würde ich sagen weitere 12 Zeichen sind möglich, müsste ich aber nachsehen.
Könnte man abfangen indem auf DE als Anfang getestet wird. Alternativ wie bei der BIC auf Leerzeichen/Zeilenumbruch als Trennzeichen testen.

MfG, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten