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.
🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 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 gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.