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.
BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> 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
Re: Umsatzdatei einer Bank importieren
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.
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
Re: Umsatzdatei einer Bank importieren
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 ❤️